npm - node - Cómo usar los scripts package.json para copiar archivos con una extensión de archivo específica
package.json scripts example (3)
Estoy probando npm como una herramienta de compilación.
Un obstáculo que he encontrado es que necesito copiar archivos de JavaScript de una carpeta a otra. La carpeta fuente contiene archivos mecanografiados, javascript y mapas, pero en la carpeta de destino solo estoy interesado en los archivos javascript.
No quiero hacer una declaración de copia para cada archivo, pero me gustaría copiar todos los archivos .js. Además, mi carpeta fuente contiene subcarpetas que también contienen archivos javascript. También deben copiarse y mantener la estructura de la subcarpeta.
Lo que he intentado es usar NCP con un filtro, pero no puedo hacer que el filtro funcione. He probado la expresión regular utilizada en el filtro y parece funcionar bien. La prueba se realizó en Regex Tester con expresión regular .*/.js$
y cadenas de prueba como main.ts
, main.js
main.js.map
etc., y solo las cadenas .js se emparejaron.
Mi paquete json contiene lo siguiente (abreviado):
{
"scripts": {
"copy": "ncp scripts wwwroot/scripts --filter=/".*(////.js$)/""
},
"devDependencies": {
"ncp": "2.0.0.0"
}
}
Como mi expresión regular está en una cuerda en una cuerda, he escapado dos veces. También probé otras variaciones, por ejemplo:
--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
No estoy de ninguna manera casado con NCP. Si algo más funciona mejor entonces lo usaré.
Entonces, ¿cómo puedo, dentro de la sección de scripts de package.json, copiar solo los archivos con una extensión específica a otra carpeta? Estoy bastante seguro de haber pasado por alto algo cegadoramente obvio ...
Puedes usar gulp.js para esto. Escriba una tarea de trago para aislar solo los archivos js (/path/to/files/*.js) y muévalos al destino de su elección. Solo requerirá unas pocas líneas de código. Incluya eso en la sección de scripts de package.json si es necesario.
El enlace a gulp.js: https://gulpjs.com/
var gulp = require(''gulp'');
gulp.task(''jscopy'', function(){
return gulp.src(''client/templates/*.js'')
.pipe(gulp.dest(''build/js''))
});
También hay un módulo npm llamado copyfiles
https://github.com/calvinmetcalf/copyfiles
Por ejemplo, para copiar todos los archivos *.css
./src
carpeta ./src
a la carpeta ./styles
:
copyfiles --flat src/*.css styles
cpx podría ser una buena sustitución.
Tiene una CLI, le permite usar globs en lugar de regex, puede conservar el árbol de directorios, y está relativamente actualizado mientras escribo esto ....