为什么还要学习 Sea.js?(学习价值)
前,先明确它的价值:
- 理解模块化思想:Sea.js 是 CMD (Common Module Definition) 规范的代表,学习它能让你深刻理解“模块是什么”、“模块如何定义”、“模块之间如何依赖”以及“模块如何加载”这些核心问题。
- 了解前端发展史:Sea.js 和 Require.js 是早期前端模块化双雄,了解它是理解 Webpack、Vite 等现代构建工具发展脉络的关键。
- 维护旧项目:国内仍有大量使用 Sea.js 的老项目在维护,掌握它是工作刚需。
- 概念相通:Sea.js 的
require、exports、module.exports等概念与 Node.js 和后来的 ES Module 高度相似,学会一个触类旁通。
视频教程精选
由于 Sea.js 的热度已经下降,新的系统化视频教程非常少,大部分资源都集中在 2025-2025 年,以下是经过筛选的、质量较高的视频教程。
基础入门类(首选)
- Bilibili - 廖雪峰的 Sea.js 教程
- 简介:这是目前能找到的最系统、最清晰的中文 Sea.js 入门视频之一,由著名技术博主廖雪峰录制,讲解通俗易懂,非常适合初学者。
- 从环境搭建、模块定义、模块引入、配置、插件等方面进行了全面介绍。
- 链接:Bilibili 搜索 “廖雪峰 Sea.js”
- 建议:这是你的首选学习资源,务必先看完这个系列。
实战项目类
- Bilibili - 使用 Sea.js 和 jQuery 开发一个简单的单页应用
- 简介:这个教程更侧重于实战,它将 Sea.js 与 jQuery 结合,演示如何构建一个简单的单页应用(SPA),包括页面切换、数据加载等。
- 优点:能让你看到 Sea.js 在真实项目中的使用方式,将理论知识落地。
- 链接:Bilibili 搜索 “Sea.js jQuery 实战”
- 建议:在看完廖雪峰的基础教程后,可以找这类实战视频来巩固学习。
综合教程(可能包含部分内容)
- Bilibili - 前端框架/工具类课程
- 简介:一些早期的“前端全栈”、“前端工程化”等课程中,会包含 Sea.js 作为模块化方案的一章进行讲解。
- 搜索关键词:
前端工程化 Sea.js、模块化加载器 Sea.js。 - 建议:这类视频可能不够深入,但可以作为补充参考。
核心概念与学习路径(图文版)
如果视频不能满足你的需求,可以结合以下核心概念进行学习。
学习路径
- 环境准备:一个本地 Web 服务器(因为 Sea.js 是异步加载的,需要 HTTP 环境,不能直接用
file://协议打开),可以使用 VS Code 的Live Server插件,或者http-server等。 - 引入 Sea.js:在 HTML 页面中通过
<script>标签引入sea.js文件。 - 定义模块:学习如何使用
define关键字来定义一个模块。 - 使用模块:学习如何使用
require来依赖和使用其他模块。 - 模块配置:学习如何配置
seajs.config来设置别名、路径等。 - 模块入口:学习如何使用
seajs.use来启动应用,加载主模块。
核心概念详解
模块定义 (define)
Sea.js 推荐使用 CMD 规范来定义模块,一个模块就是一个文件。
// 定义一个名为 `myModule` 的模块
// id 是模块名,一般省略,由文件名决定
// deps 是依赖的模块列表,也常省略,在 require 中声明
// factory 是模块的主体,是一个函数,返回值就是模块的导出内容
define(function(require, exports, module) {
// 1. 引入依赖(按需引入,懒加载)
var $ = require('jquery');
var util = require('./util.js');
// 2. 定义模块内容
function myFunc() {
console.log('Hello from myModule!');
$('body').css('background-color', 'red');
util.doSomething();
}
// 3. 暴露模块接口(通过 return 或 exports)
// 方式一:return 推荐
return {
myFunc: myFunc
};
// 方式二:exports
// exports.myFunc = myFunc;
});
特点:推崇依赖就近。require 可以写在函数的任何位置,只有当代码执行到 require 时,才会真正去加载依赖模块,这被称为“懒加载”。
模块使用 (require 和 seajs.use)
require:在模块内部使用,用于引入其他模块。seajs.use:在主 HTML 文件或入口模块中使用,用于启动整个应用。
HTML 文件 (index.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">Sea.js Demo</title>
<!-- 1. 引入 sea.js -->
<script src="path/to/sea.js"></script>
</head>
<body>
<h1>Sea.js Demo</h1>
<button id="btn">Click Me</button>
<!-- 2. 使用 seajs.use 启动应用 -->
<script>
seajs.use(['./js/main.js'], function(main) {
// main.js 模块加载完成后执行的回调
main.init();
});
</script>
</body>
</html>
入口模块 (js/main.js)
define(function(require, exports, module) {
// 引入业务模块
var myModule = require('./myModule.js');
function init() {
console.log('App initialized!');
document.getElementById('btn').onclick = function() {
myModule.myFunc();
};
}
// 暴露 init 方法给 seajs.use 的回调
exports.init = init;
});
模块配置 (seajs.config)
为了避免写很长的相对路径,可以使用 seajs.config 进行配置。
// 在 seajs.use 之前调用
seajs.config({
// 设置别名
alias: {
'jquery': 'path/to/jquery.min.js',
'util': 'path/to/util.js'
},
// 设置基础路径
base: '/assets/js/',
// 预加载模块
preload: []
});
seajs.use(['./main.js']);
官方文档与补充资源
- Sea.js 官方文档:https://seajs.github.io/seajs/docs/
- 必读! 文档是最权威、最准确的资料,虽然有些旧,但核心概念永不过时,特别是 API 文档 和 教程 部分。
- GitHub 仓库:https://github.com/seajs/seajs
可以查看源码,了解其实现原理。
- Require.js vs Sea.js:了解 AMD 和 CMD 的区别是前端模块化进阶的重要一步,可以搜索相关文章进行对比。
总结与建议
- 主攻视频:优先观看 廖雪峰的 Sea.js 教程,建立整体认知。
- 结合文档:视频看完后,遇到具体 API 不理解时,立刻查阅 官方文档。
- 动手实践:不要只看不练! 自己搭建一个最简单的项目,定义几个模块,用
require和seajs.use把它们串起来,这是检验学习成果的唯一标准。 - 理解思想:重点理解 CMD 的“按需加载” 和 依赖就近 思想,而不是死记 API,这对你后续学习任何模块化方案都有巨大帮助。
虽然 Sea.js 已不再是主流,但它所承载的模块化思想是前端工程化的基石,花一点时间学习它,绝对是一项高回报的投资,祝你学习顺利!
