2016-06-25 11 views
22

Sto provando npm come strumento di creazione.Come utilizzare gli script package.json per copiare file con estensione file specifica

Uno scoglio che ho riscontrato è che ho bisogno di copiare i file javascript da una cartella all'altra. La cartella di origine contiene file dattiloscritti, file javascript e file di mappe, ma nella cartella di destinazione sono interessato solo ai file javascript.

Non voglio creare una dichiarazione di copia per ogni file, ma vorrei copiare tutti i file .js. Inoltre, la mia cartella sorgente contiene sottocartelle che contengono anche file javascript. Questi devono essere copiati e mantenere la struttura della sottocartella.

Quello che ho provato è usare NCP con un filtro, ma non riesco a far funzionare il filtro. Ho testato la regex utilizzata nel filtro e sembra funzionare bene. Il test è stato effettuato a Regex Tester con espressione regolare .*\.js$ e stringhe di prova come main.ts, main.jsmain.js.map ecc. E solo le stringhe .js erano abbinate.

Il mio pacchetto JSON contiene la seguente (abbreviato):

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

Dato che il mio regex è in una stringa in una stringa devo doppio sfuggito. Ho provato anche altre varianti, ad esempio:

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

Non sono sposato con NCP. Se qualcos'altro funziona meglio, lo userò.

Quindi: Come faccio a, nella sezione script di package.json copiare solo file con un'estensione specifica in un'altra cartella? Sono abbastanza sicuro di aver trascurato qualcosa di assolutamente ovvio ...

risposta

38

cpx potrebbe essere una buona sostituzione.

Ha una CLI, consente di utilizzare gocce invece di regex, in grado di preservare la struttura delle directory, ed è relativamente up-to-date mentre scrivo questo ....

+8

Perfetto. Ora il mio script è "copy": "cpx \" scripts/**/*. Js \ "wwwroot/scripts", con devDependency "cpx": "1.3.1". È esattamente quello che stavo cercando. –

3

È possibile utilizzare gulp.js per questo. Scrive un'attività gulp per isolare solo i file js (/path/to/files/*.js) e spostarli nella destinazione desiderata. Richiederà solo poche righe di codice. Includilo nella sezione script di package.json se necessario.

Il link per gulp.js: https://gulpjs.com/

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