web-dev-qa-db-fra.com

Concaténer des fichiers avec npm en tant qu'outil de construction

J'ai récemment découvert que je pouvais utiliser npm en tant que coureur de tâches au lieu d'abattre ou de grogner, tout est fantastique jusqu'à présent (peluches, stylet, jade, uglify, regarder, etc.) mais la partie concaténation ne semble pas pouvoir y parvenir. Avec gulp c'était quelque chose comme:

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'));
});

Y a-t-il un moyen de faire ça avec npm?

Pour être plus clair, mon objectif est de faire quelque chose comme ceci:

// 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/**"
  }
}
15
Web Dev T

essaye ça

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

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

et n'oubliez pas de npm install concat

Par commande Utiliser 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

13
vorant

Oui, concat est parti. Je regardais cela aussi alors que je passais de gulp à pure node et trouvais le paquet manquant.

Au lieu de cela, j'utilise maintenant buildify . Cela pourrait être un peu excessif, mais cela fonctionne.

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");
2
Ben

J'utilise concat-files

Et j'ai remarqué qu'il y a aussi concatenate-files

Les deux sont assez simples. 

Notez également que l'écriture de votre propre est assez simple aussi: 

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

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

Le package concat n'est plus disponible. Je suggère d'utiliser concat-with-sourcemapshttps://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;
1
Romain Durand