Sea.js 的目的是追求简单的代码书写和组织方式, Sea.js 并没有过多功能而是主要对前端程序的部署结构作出约束, 下面我们就来看一下 JavaScript 的模块化开发框架 Sea.js 上手指南:
SeaJS 是一个遵循 CommonJS 规范的 JavaScript 模块加载框架,可以实现 JavaScript 的模块化开发及加载机制。与 jQuery 等 JavaScript 框架不同,SeaJS 不会扩展封装语言特性,而只是实现 JavaScript 的模块化及按模块加载。SeaJS 的主要目的是令 JavaScript 开发模块化并可以轻松愉悦进行加载,将前端工程师从繁重的 JavaScript 文件及对象依赖处理中解放出来,可以专注于代码本身的逻辑。
Sea.js 所有源码都存放在 GitHub 上:https://github.com/seajs/examples,目录结构为:
引入 seajs 主文件
- <script src="js/sea.js">
- </script>
- <script type="text/javascript">
- // seajs配置项
- seajs.config({
- //设置基本的JS路径(引用外部文件的根目录)
- base: "./js",
- //设置别名(方便后面引用使用)
- alias: {
- "jQuery": "jquery.js"
- },
- //路径配置(跨目录调用或者目录比较深时使用)
- paths: {
- 'jQuery': 'http://libs.baidu.com/jquery/2.0.0/'
- },
- //设置文件编码
- charset: "utf-8",
- //预加载文件
- preload: ['jQuery']
- });
- // 引用主入口文件
- seajs.use(['main', 'jQuery'],
- function(e, $) {
- //回调函数
- alert("全部加载完成");
- });
- </script>
seajs 主入口文件 (main)
- define(function(require, exports, module) {
- // 主入口文件引入其他文件依赖
- //var testReQ = require('index');
- var testReQ = require.async('index',function(){
- //异步加载回调
- alert("我是异步加载的index的回调函数");
- });
- // 运行index释放的接口方法
- // testReQ.testInit();
- // 运行index释放的接口方法(module)
- testReQ.textFun();
- });
seajs 依赖文件 (index)
- define(function(require, exports, module) {
- // 对外释放接口
- exports.testInit = function(){
- alert("我是一个接口");
- };
- // 如果需要释放大量接口,可以使用module
- var testObj = {
- name:"qiangck",
- sex:"man",
- textFun:function(){
- alert("我是一个使用module.exports的对象方法");
- }
- }
- // module.exports接收obj对象
- module.exports = testObj;
- });
文件的加载顺序
下面我们从 hello.html 入手,来瞧瞧使用 Sea.js 如何组织代码。
在页面中加载模块
在 hello.html 页尾,通过 script 引入 sea.js 后,有一段配置代码:
- // seajs 的简单配置
- seajs.config({
- base: "../sea-modules/",
- alias: {
- "jquery": "jquery/jquery/1.10.1/jquery.js"
- }
- })
- // 加载入口模块
- seajs.use("../static/hello/src/main")
sea.js 在下载完成后,会自动加载入口模块。页面中的代码就这么简单。
模块代码
这个小游戏有两个模块 spinning.js 和 main.js,遵循统一的写法:
- // 所有模块都通过 define 来定义
- define(function(require, exports, module) {
- // 通过 require 引入依赖
- var $ = require('jquery');
- var Spinning = require('./spinning');
- // 通过 exports 对外提供接口
- exports.doSomething = ...
- // 或者通过 module.exports 提供整个接口
- module.exports = ...
- });
上面就是 Sea.js 推荐的 CMD 模块书写格式。如果你有使用过 Node.js,一切都很自然。
来源: http://www.phperz.com/article/17/0401/265832.html