2016-01-28 28 views
10

Niedawno odkryłem, że mogę używać npm jako biegacza zadań zamiast łzawić lub chrząkać, wszystko jest fantastyczne do tej pory (lint, rysik, jade, uglify, zegarek itp.), Ale konkatenacja część, nie mogę tego osiągnąć. Z łykiem było coś takiego:Łączenie plików z npm jako narzędziem do kompilacji

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

Czy jest jakiś sposób, aby to zrobić z npm?

Aby być bardziej jasne, moim celem jest, aby zrobić coś takiego:

// 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

Możesz próbowano patrząc na 'pakietu concat', gdzie za pomocą inspiracji? – Malkus

+0

Tak, ale potrzebuję czegoś takiego jak 'concat js/** --out all.js' w moim script.json scripts object –

Odpowiedz

10

spróbować tej

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

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

i Don zapomnij o npm install concat

Dzięki poleceniu używać 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

Hej, dziękuję ci za poświęcony czas, ale próbuję osiągnąć konkatenację za pomocą NPM jako narzędzia do budowania, dodając w moim package.json coś w tym rodzaju "" skrypty ": { " test ":" echo \ "Błąd: żaden test nie został określony \" && exit 1 ", " rysik ":" cat ss new.styl && stylus ss - -compress --out lib/stylów”, "dev": "powtórka-script" }, "zegarki": { "rysika": "ss/**" }' –

+0

I dodaje inny wariant, spróbuj to – vorant

+0

Yey! Zrobiłem to, musiałem zmienić tę część '" concat ":" concat-glob-cli -f ścieżka/do/**/*. js -o bundle.js "," to "" concat ":" concat -cli -f ścieżka/do/**/*. js -o bundle.js ",' ..Dziękuję Ci bardzo!! –

2

Tak, concat zniknął. Patrzyłem też na to, odsuwając się od łyka do czystego węzła i stwierdziłem, że brakuje tej paczki.

Jako alternatywę używam teraz buildify. Może być lekka przesada, ale działa.

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

Używam concat-files

I zauważyłem tam również concatenate-files

Oba są dość proste.

Należy również pamiętać, pisanie własnego jest dość prosta też:

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

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

Pakiet concat nie jest już dostępny. Proponuję za pomocą 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;