2016-06-25 5 views
22

Ich probiere npm als Build-Tool aus.So verwenden Sie package.json-Skripts zum Kopieren von Dateien mit bestimmten Dateierweiterung

Ein Stolperstein, den ich festgestellt habe, ist, dass ich Javascript-Dateien von einem Ordner zum anderen kopieren muss. Der Quellordner enthält Typoskript-Dateien, Javascript-Dateien und Kartendateien, aber im Zielordner bin ich nur an Javascript-Dateien interessiert.

Ich möchte keine Kopie-Anweisung für jede Datei erstellen, aber alle .js-Dateien kopieren möchten. Außerdem enthält mein Quellordner Unterordner, die auch Javascript-Dateien enthalten. Diese müssen ebenfalls kopiert werden und die Unterordnerstruktur beibehalten.

Was ich versucht habe, ist NCP mit einem Filter zu verwenden, aber ich kann den Filter nicht funktionieren. Ich habe die Regex im Filter getestet und es scheint gut zu funktionieren. Der Test wurde unter Regex Tester mit regulärem Ausdruck .*\.js$ und Teststrings wie main.ts, main.jsmain.js.map usw. durchgeführt, und nur die .js-Zeichenfolgen wurden abgeglichen.

Mein Paket json enthält die folgenden (abgekürzt):

{ 
    "scripts": { 
     "copy": "ncp scripts wwwroot/scripts --filter=\".*(\\\\.js$)\"" 
    }, 
    "devDependencies": { 
     "ncp": "2.0.0.0" 
    } 
} 

Da meine Regex in einer Zeichenkette in einem String ist, ich habe es doppelt entkommen. Ich habe auch andere Varianten ausprobiert, zum Beispiel:

--filter=/.*\.js$/g  - compilation error 
--filter=/.*\\.js$/g  - no files copied 
--filter=\".*\\.js$\"  - no files copied 
--filter=\"/.*\\.js$/g\" - no files copied 
(no filter)    - all files copied 

ich in keiner Weise zu NCP verheiratet bin. Wenn etwas anderes besser funktioniert, werde ich das verwenden.

Also: Wie kann ich innerhalb von package.json die Skripts nur Dateien mit einer spezifischen Erweiterung in einen anderen Ordner kopieren? Ich bin mir ziemlich sicher, dass ich etwas blendend offensichtliche übersehen habe ...

Antwort

38

cpx könnte eine gute Substitution sein.

Es hat eine CLI, können Sie Klackse statt Regex verwenden, können die Verzeichnisstruktur erhalten, und ist relativ up-to-date, wie ich dies schreibe ....

+8

Perfekt genannt. Jetzt ist mein Skript "copy": "cpx \" scripts/**/*. Js \ "wwwroot/scripts", mit der devDependency "cpx": "1.3.1". Es ist genau das, was ich gesucht habe. –

3

Sie gulp.js verwenden können dafür. Schreiben Sie eine Schluck-Aufgabe, um nur die js-Dateien (/path/to/files/*.js) zu isolieren und verschieben Sie sie an ein Ziel Ihrer Wahl. Es werden nur ein paar Zeilen Code benötigt. Fügen Sie das im Script-Abschnitt von package.json bei Bedarf hinzu.

Der Link zu gulp.js: https://gulpjs.com/

var gulp = require('gulp'); 
gulp.task('jscopy', function(){ 
    return gulp.src('client/templates/*.js') 
    .pipe(gulp.dest('build/js')) 
}); 
Verwandte Themen