76 votes

Comment utiliser les scripts package.json pour copier des fichiers ayant une extension spécifique ?

J'essaie d'utiliser npm comme outil de construction.

L'une des pierres d'achoppement que j'ai rencontrées est que je dois copier des fichiers javascript d'un dossier à un autre. Le dossier source contient des fichiers typescript, des fichiers javascript et des fichiers map, mais dans le dossier cible, je ne suis intéressé que par les fichiers javascript.

Je ne veux pas faire une déclaration de copie pour chaque fichier, mais je voudrais copier tous les fichiers .js. En outre, mon dossier source contient des sous-dossiers qui contiennent également des fichiers javascript. Ceux-ci doivent être copiés également, et maintenir la structure des sous-dossiers.

Ce que j'ai essayé de faire, c'est d'utiliser PCN avec un filtre, mais je n'arrive pas à faire fonctionner le filtre. J'ai testé l'expression rationnelle utilisée dans le filtre et elle semble fonctionner correctement. Le test a été effectué à Testeur de Regex avec une expression régulière .*\.js$ et des chaînes de test comme main.ts , main.js main.js.map etc., et seules les chaînes .js ont été trouvées.

Mon paquet json contient les éléments suivants (en abrégé) :

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

Comme mon expression rationnelle se trouve dans une chaîne de caractères dans une chaîne de caractères, je l'ai mise en double-escape. J'ai également essayé d'autres variantes, par exemple :

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

Je ne suis en aucun cas marié à NCP. Si quelque chose d'autre fonctionne mieux, je l'utiliserai.

Donc : Comment puis-je, à l'intérieur de la section scripts de package.json, copier uniquement les fichiers avec une extension spécifique vers un autre dossier ? Je suis presque sûr d'avoir oublié quelque chose d'absolument évident...

1voto

Aliaksandr Pyrkh Points 346

Ncp copie de manière récursive, donc avant de copier les fichiers, il vérifiera si le répertoire correspond au filtre ou non, par exemple :

d:\path\to\app\src\server
d:\path\to\app\src\server\middleware
d:\path\to\app\src\server\middleware\cool-middleware.js
d:\path\to\app\src\server\middleware\cool-middleware.js.map

Donc, votre regex doit correspondre à tous ces chemins et votre fichier aussi.

0voto

rhigdon Points 194

Je suis capable d'utiliser simplement cp dans ma commande script :

"build": "npx babel src --out-dir dist && cp ./src/*.css ./dist",

Cela fonctionnera si votre paquet de distribution se trouve déjà dans le dossier /dist. Vous pouvez également ajouter une autre commande pour le copier, puis exécuter la commande de publication.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X