web-dev-qa-db-fra.com

Comment utiliser les scripts package.json pour copier des fichiers avec une extension de fichier spécifique

J'essaie npm en tant qu'outil de construction.

Un problème que j'ai rencontré 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 mappés, mais dans le dossier cible, seuls les fichiers javascript m'intéressent.

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

Ce que j'ai essayé utilise NCP avec un filtre, mais je ne parviens pas à faire fonctionner le filtre. J'ai testé la regex utilisée dans le filtre et elle semble bien fonctionner. Le test a été effectué à Regex Tester avec l'expression régulière .*\.js$ et des chaînes de test comme main.ts, main.jsmain.js.map etc, et seules les chaînes .js ont été mises en correspondance.

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

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

Depuis que mon regex est dans une chaîne dans une chaîne, je l'ai échappé deux fois. J'ai aussi 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.

Alors: comment, dans la section scripts de package.json, ne copier que les fichiers avec une extension spécifique dans un autre dossier? Je suis presque sûr d'avoir oublié quelque chose d'évident aveuglant ...

36
Thomas Jørgensen

cpx pourrait être une bonne substitution.

Il a une CLI, vous permet d'utiliser globs au lieu de regex, peut préserver l'arborescence des répertoires, et est relativement à jour au moment où j'écris ceci ....

66
Matthew Bakaitis

Il existe également un module npm appelé copyfileshttps://github.com/calvinmetcalf/copyfiles

Par exemple. copier tous les fichiers *.css du dossier ./src dans le dossier ./styles:

copyfiles --flat src/*.css styles
12
asdfasdfads

Vous pouvez utiliser gulp.js pour cela. Ecrivez une tâche gulp pour n’isoler que les fichiers js (/path/to/files/*.js) et déplacez-les vers la destination de votre choix. Il ne faudra que quelques lignes de code. Incluez cela dans la section de script de package.json si nécessaire.

Le lien vers gulp.js: https://gulpjs.com/

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