JS文件打包(合并?)
发布于 12 年前 作者 wppept 19493 次浏览 最后一次编辑是 8 年前

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命令支持多种打包方式,比如打包压缩,打包不压缩等等。

1 回复

求个实例教程,一直不会打包压缩,没实际操作例子看,看到的那些,都是云里雾里,不知道说啥。

回到顶部