1,项目地址:我看到的一个实例中,用到了Jake(https://github.com/jcoglan/jake),但是此处Jake发挥的作用不大,主要功能还是Node.js的fs完成的。 此处必须介绍一下CommonJS提到的的require,define方式,也是基于这种实现,可以将项目文件分成一个个的module,待到发布的时候再组装成一个JS文件。
2,关键性的两个函数:
function collect(path, files, matches) {
matches = matches || function (path) {
return path.match(/\.js$/);
};
if (fs.statSync(path).isDirectory()) {
fs.readdirSync(path).forEach(function (item) {
collect(_path.join(path, item), files, matches);
});
} else if (matches(path)) {
files.push(path);
}
}
以及这个:
//调用collect收集生成了jsfiles文件路径字符串数组
src.js += jsfiles.reduce(function (buffer, file) {
return buffer + fs.readFileSync(file, "utf-8");
}, "");
这样就把所有的JS文件组装成一个JS文件了。其原理就是利用了Array.prototype.reduce函数,将所有的文件都读取放到buffer里面。collect函数就是递归读取指定路径下的所有JS文件。 当然,如果你的每个JS文件需要用闭包包起来,避免全局变量污染,也可以在reduce的迭代函数里面加入一些内容。
3,部署:实际部署最好在配合一些任务调度函数来完成,比如Jake可以部分完成这种事,讲上述打包功能放到这里:
desc('Deploy All JS files');
task('deploy', [], function(params) {
//打包功能
});
这样可以通过jake命令支持多种打包方式,比如打包压缩,打包不压缩等等。