grunt-cmd-combo 打包后的文件可以脱离 SeaJS 直接执行。
grunt-cmd-combo 的模块化标准是 SeaJS 的一个子集,规则非常简单:
- 所有的
define
定义只包含一个参数,即factory
函数: factory
函数只接受require
函数以及exports
对象,不接受module
对象require
只支持相对路径require
例子:
/* math.js */
define(function (require) {
return {
plus: function (a, b) {
return a + b;
}
};
});
/* main.js */
define(function (require) {
require('./math').plus(1, 2); // 3
});
安装:
npm install grunt-cmd-combo
在 Gruntfile.js
中加入如下配置:
grunt.initConfig({
combo: {
options: {
sourceMap: {
sourceRoot: '/src/'
}
},
build: {
files: [{
expand: true,
cwd: 'test/src/',
src: '**/*.js',
dest: 'test/dist',
ext: '.combo.js'
}]
}
}
});
grunt.loadNpmTasks('grunt-cmd-combo');
会将上面例子中的 main.js
打包成 main.combo.js
。
打包后的代码只需要一个 <script>
标签来载入,不需要 SeaJS 支持:
<script src="/dist/main.combo.js" data-main="main" type="text/javascript"></script>
files
(必须) 参考 grunt files objectsourceMap
(可选)非空则生成sourceMap
,默认不生成sourceMap.sourceRoot
(可选) 生成sourceMap
中的sourceRoot
(参考 SourceMapGenerator 中的sourceRoot
参数)
以上面给的例子 math.js
以及 main.js
为例,在对 main.js
打包时的流程如下:
- 分析入口模块
main.js
,建立主模块的依赖数组dpes
- 将所有的 require 参数由相对于当前文件的路径转为相对于源码根目录的路径:
require('./math')
会被转换为require('math')
- 分析所有依赖的模块,将依赖的模块名加入
deps
- 对所有依赖的模块,递归地进行 2-4 步
- 将
deps
中所有的模块中的代码按顺序合并成一个文件main.combo.js
- 将
loader.js
的内容加到main.combo.js
(提供无 SeaJS 环境下的define
函数支持) - 将
main.js
的内容加到main.combo.js
的结尾
loader.js
提供了最简单的一个 define
函数实现,以使得代码在打包后可以脱离 SeaJS 执行。
欢迎提交 Push Request,提交前请先通过 grunt test
保证代码通过单元测试和 jslint 检查。
1.0.1
2013-07-01 固定依赖模块的版本号,更新 Grunt 0.4.1。1.0.0
2013-02-28 发布第一个正式版本,更新了 README.md 和 testcase 到 Grunt 0.4.0。0.1.8
2013-02-22 Grunt 0.4 支持。0.1.6
2013-01-07 保留注释。0.1.5
2012-12-10 增加 source map 支持。0.1.4
2012-12-10 文件增加.combo
后缀。0.1.0
2012-12-10 首次发布。
Copyright (c) 2013 PerfectWorks
Licensed under the MIT license.