2016-01-28 8 views
10

Recentemente ho scoperto che posso usare npm come task runner invece di gulp o grunt, tutto è fantastico finora (filaccia, stilo, giada, uglify, watch .. ecc.) Ma la concatenazione parte, non riesco a realizzarlo. Con gulp era qualcosa del tipo:Concatenare file con npm come strumento di costruzione

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

C'è un modo per farlo con npm?

Per essere più chiari, il mio obiettivo è quello di fare qualcosa di simile:

// 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/**" 
    } 
} 
+0

Hai provato a guardare il 'pacchetto concat' dove usando l'ispirazione? – Malkus

+0

Sì, ma ho bisogno di qualcosa come 'concat js/** --out all.js' nel mio oggetto package.json package –

risposta

10

provare questo

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

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

e don dimentichiamoci di npm install concat

Per ordine utilizzare 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

+0

Hey grazie per il tuo tempo, ma sto cercando di ottenere la concatenazione usando NPM come strumento di costruzione, aggiungendo nel mio package.json qualcosa come questo '" script ": { " test ":" echo \ "Errore: nessun test specificato \" && exit 1 ", " stylus ":" cat ss new.styl && stylus ss - -compress --out lib/fogli di stile", "dev": "replica-script" }, "orologi": { "stilo": "ss/**" }' –

+0

ho aggiunto un'altra variante, provo it – vorant

+0

Yey! ha fatto il trucco, ho dovuto cambiare questa parte '" concat ":" concat-glob-cli -f path/a/**/*. js -o bundle.js ",' a '" concat ":" concat -cli -f path/a/**/*. js -o bundle.js ",' ..Grazie mille!! –

2

Yep, concat è andato. Stavo guardando anche a questo mentre mi spostavo da gulp a puro nodo e ho trovato il pacchetto mancante.

In alternativa ora sto utilizzando buildify. Potrebbe essere un po 'eccessivo, ma funziona.

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

Sto usando concat-files

e ho notato c'è anche concatenate-files

Entrambi sono abbastanza semplici.

noti inoltre scrivere il proprio è piuttosto semplice troppo:

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

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

Il pacchetto concat non è più disponibile. Io suggerirei di usare 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; 
Problemi correlati