1.0.0 • Published 13 years ago
grunt-cmd-combo v1.0.0
grunt-cmd-combo
特点
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
});原理
以上面给的例子 math.js 以及 main.js 为例,在对 main.js 打包时的流程如下:
- 分析入口模块
main.js,建立主模块的依赖数组dpes - 将所有的 require 参数由相对于当前文件的路径转为相对于源码根目录的路径:
require('./math')会被转换为require('math') - 分析所有依赖的模块,将依赖的模块名加入
deps - 对所有依赖的模块,递归地进行 2-4 步
- 将
deps中所有的模块中的代码按顺序合并成一个文件 - 将
loader.js的内容加到最终输出文件的开头(提供无 SeaJS 环境下的define函数支持) - 将
main.js的内容加到最终输出文件的结尾
loader.js
loader.js 提供了最简单的一个 define 函数实现,以使得代码在打包后可以脱离 SeaJS 执行。
使用
安装:
npm install grunt-cmd-combogrunt-cmd-combo 是一个 MultiTask,支持 3 个参数:
src 源码目录。所有的模块都应该放在这个目录下,必须以 / 结尾。
dest 目标目录。打包后的文件会输出到这个目录下,并且保持 src 目录中的目录结构,必须以 / 结尾。
initModules 入口模块。文件路径应该相对于 src 目录,支持文件通配符指定多个入口模块,会分别打包输出成多个文件。
参考例子:
grunt.initConfig({
combo: {
build: {
src: 'src/', // 源码目录
dest: 'dist/', // 目标目录
initModules: 'main.js' // 入口模块,支持文件通配符
}
}
});
grunt.loadNpmTasks('grunt-cmd-combo');会将 src/main.js 打包输出到 dist/main.js。
打包后的代码只需要一个 <script> 标签来载入,不需要 SeaJS 支持:
<script src="/dist/main.js" data-main="main" type="text/javascript"></script>优点
Push Request
欢迎提交 Push Request,提交前请先通过 grunt test 保证代码通过单元测试和 jslint 检查。
发布历史
0.1.0 2012-12-10 首次发布。
License
Copyright (c) 2012 PerfectWorks
Licensed under the MIT license.