node package manager
Stop writing boring code. Discover, share, and reuse within your team. Create a free org »

hx

hx

CMD 打包工具

内部参考browserify , 用流的方式实现构建打包流程 支持transform插件 可以与gulp 无缝结合

Usage

从 NPM 中安装:

npm install hx

简单run:

var hx = require("hx");
var d = hx({
    "entry": "./scripts/index.js", //入口文件是 必填
    "base": "./", //项目根目录  可选
    "alias": { //路径替换 可选
        "zepto": "lib/zepto/zepto",
    },
    "output": { //如果是自己打包,不依赖gulp等其他工具, 此项为必填
        "dir": "output", //输出目录
        "name": "result.js", //打包文件的名字
    }
})
d.run();

与 gulp 结合

var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
//合并js
gulp.task('js-concat', function() {
    var config = {
        "entry": "./scripts/index.js", //入口文件是 必填
        "base": "./", //项目根目录  可选
        "alias": { //路径替换 可选
            "zepto": "lib/zepto/zepto",
        },
        "name": "result.js", //打包文件的名字
    }
    var d = hx(config);
    return d.run()
        .pipe(source(config.name))
        .pipe(buffer())
        .pipe(gulp.dest(output + "/"));
});

transform 插件

/**
 * try catch 插件
 * 在每个的函数外部包裹一层try catch 
 */
var through = require('through2');
 
module.exports = function(file, opts) {
    console.log(file)
    var data = '',
        stream = through(write, end);
 
    return stream;
 
    function write(buf, enc, next) {
        data += buf;
        next();
    }
 
    function end() {
        var result = "try {" + 
                     data +
                     "} catch(error) {alert(error)}";
        stream.push(result);
        stream.push(null);
    }
};
 
/**
 * remove 插件
 * 不想打包指定的文件
 */
var through = require('through2');
 
var filter = "xxx";
 
module.exports = function(file, opts) {
    var data = '',
        stream = through(write, end);
 
    return stream;
 
    function write(buf, enc, next) {
        data += buf;
        next();
    }
 
    function end() {
        result = data;
        if (file.indexOf(filter) !== -1) {
            //文件名中有xxx,该文件以及该文件的依赖不会被打包进来
            result = "";
        }
        stream.push(result);
        stream.push(null);
    }
};
 
 
//添加transform
hx.transform(transformname1);
hx.transform(transformname2);

巧妙利用transfrom 插件与AST(uglify)语法树,可以非常灵活的实现任何事情! 比如去掉文件内容里的alert/console神马的,都是很容易的。

有很多不足

懒人不解释,爱折腾的程序员欢迎交流