使用npm作为构建工具连接文件

时间:2016-01-28 03:33:24

标签: javascript node.js npm concatenation

我最近发现我可以使用npm作为任务运行器而不是gulp或grunt,到目前为止一切都很棒(lint,stylus,jade,uglify,watch ......等)但是连接部分,我似乎无法实现那。 gulp就像是:

gulp.task('scripts', function() {
  return gulp.src('www/js/**/*.js')
    .pipe(concat('all.js'))
    .pipe(gulp.dest('www/dist'))
    .pipe(rename('all.min.js'))
    .pipe(uglify())
    .pipe(gulp.dest('www/dist'));
});

有没有办法可以用npm做到这一点?

为了更清楚,我的目标是做这样的事情:

// package.json

{
  "name": "f_todo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "author": "",
  "license": "MIT",
  "devDependencies": {
    "concat": "^1.0.0",
    "rerun-script": "^0.6.0",
    "stylus": "^0.53.0"
  },
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "stylus": "stylus ss --compress --out lib/stylesheets",
    "concat": "concat dependency code would be here",
    "dev": "rerun-script"
  },
  "watches": {
    "stylus": "ss/**"
  }
}

5 个答案:

答案 0 :(得分:14)

试试这个

var concat = require('concat')    
concat(['a.css', 'b.css', 'c.css'], 'all.css')

https://www.npmjs.com/package/concat

并且不要忘记npm install concat

按命令 使用concat-glob-cli

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "concat": "concat-glob-cli -f path/to/**/*.js -o bundle.js",
    ...
 },

https://www.npmjs.com/package/concat-glob-cli

答案 1 :(得分:2)

是的,concat走了。我正在看着这个,同时从吞咽到纯节点,发现包丢失了。

作为替代方案,我现在正在使用buildify。 可能会有点矫枉过正,但它确实有效。

ViewPager.setOffscreenPageLimit(int)

答案 2 :(得分:2)

我正在使用concat-files

我注意到还有concatenate-files

两者都很简单。

另请注意,编写自己的内容也非常简单:

var output = files.map((f)=>{
  return fs.readFileSync(f).toString();
}).join(';')

fs.writeFileSync('dist/bundle.js', output)

答案 3 :(得分:1)

concat包已不再可用。我建议使用concat-with-sourcemaps https://www.npmjs.com/package/concat-with-sourcemaps

var concat = new Concat(true, 'all.js', '\n');
concat.add(null, "// (c) John Doe");
concat.add('file1.js', file1Content);
concat.add('file2.js', file2Content, file2SourceMap);

var concatenatedContent = concat.content;
var sourceMapForContent = concat.sourceMap;

答案 4 :(得分:0)

您还可以使用Shell的功能来执行所需的操作:

"scripts": {
  "concat": "cat www/js/**/*.js > all.js"},