Skip to content

Instantly share code, notes, and snippets.

@7studio
Last active May 18, 2017 13:06
Show Gist options
  • Save 7studio/bf7773d16301ebf52ba989ac3a563e11 to your computer and use it in GitHub Desktop.
Save 7studio/bf7773d16301ebf52ba989ac3a563e11 to your computer and use it in GitHub Desktop.
`gulp.src` and the trailing slash

Structude de départ :

svgs/
  fileA.svg
  fileB.svg.bkp
  spr-A.svg
  dir1/
    file1A.svg
    file1B.svg
  spr-dir2/
    file2A.svg
    file2B.svg

Structude souhaitée après la copie :

svgs/
  fileA.svg
  spr-A.svg
  dir1/
    file1A.svg
    file1B.svg

Tache Gulp simplifiée :

gulp.task('svgs', (done) => {
    return gulp.src([
    	'svgs/**/*',
      '!svgs/**/*.bkp',
      '!svgs/**/spr-*/',
      '!svgs/**/spr-*/**/*',
    ])
    .pipe(gulp.dest('svgs'));
});

Résultat : Le fichier spr-A.svg a été retiré par la règle !svgs/**/spr-*/ alors que celui-ci a été écrite de façon à n'exclure que les répertoires.

svgs/
  fileA.svg
  dir1/
    file1A.svg
    file1B.svg

Après quelques recherches, il semble que gulp.src soit basé sur glob mais contrairement à ce dernier, gulp.src ne tient pas compte du / final pour faire la différence entre un fichier et un répertoire.

J'ai loupé un truc ?

@sdussaut
Copy link

sdussaut commented May 17, 2017

Je pense qu'il faut que tu sois un peu plus spécifique pour ta première règle : svgs/**/*.svg
Ensuite, tu peux aussi essayer de mettre tes exceptions d'abord et ensuite ceux que tu veux.
On a déjà eu ce genre de comportement, ce n'est pas dû à Gulp mais bien à Glob, qui est un peu idiot/illogique certaines fois.

@7studio
Copy link
Author

7studio commented May 18, 2017

Merci Seb 😃
Il semble que ça soit bien un problème avec Glob car svgs/**/spr-*/ et !svgs/**/spr-*/ me retourne la même chose…

J'ai finalement privilégié une solution plus "radicale" :

gulp.task('svgs', (done) => {
    return gulp.src([
      'svgs/**/*',
      '!svgs/**/*.bkp',
      '!svgs/**/spr-*/**/*',
    ])
    .pipe(gulp.dest('svgs'))
    .on('end', () => {
      del('svgs/**/spr-*/');
    });
});

@sdussaut
Copy link

Ahaha effectivement c'est beaucoup plus radical :D L'important c'est que ça fonctionne même si on aimerait que tout soit toujours parfait…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment