Объединение файлов с помощью npm в качестве инструмента сборки

Недавно я обнаружил, что я могу использовать npm в качестве бегуна задач вместо gulp или хрюкать, все до сих пор фантастично (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/**"
  }
}

Ответ 1

попробуйте это

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

Ответ 2

Да, конкат ушел. Я тоже смотрел на это, удаляясь от gulp до чистого node и обнаружил, что пакет отсутствует.

В качестве альтернативы я теперь использую buildify. Может быть небольшой перебор, но он работает.

var buildify = require('buildify');
var files = [
    "./node_modules/moduleA/file1.js",
    "./node_modules/moduleB/file2.js",
];

buildify()
    .concat(files)
    .save("./dist/www/scripts/init.min.js");

Ответ 3

Я использую concat-files

И я заметил там также concatenate-files

Оба довольно просты.

Также обратите внимание, что писать собственное тоже довольно просто:

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

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

Ответ 4

Пакет 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;