gulp clean работает некорректно

#node.js #gulp #del

#node.js #gulp #del

Вопрос:

У меня такая структура каталогов.

 dist
|--client
   |--assets
      |--images
   |--bower_components
|--server
|--.bower.json
  

Я пытаюсь очистить папку dist, за исключением папки assets / images.

Но когда я выполняю эту команду в режиме dryRun, она не удаляет файл assets / images. Но после его отключения он удаляет все файлы и папки.

 gulp.task('clean:dist', () => {
   del.sync([
    `${paths.dist}/!(.git*|.openshift|Procfile)**`,
     `${paths.dist}/client/**`,
    `!${paths.dist}/client/assets`,
    `!${paths.dist}/client/assets/**`], {
    //dryRun: true
  });
  //console.log('dELETE FIELSE ARE: '   JSON.stringify(value));
});
  

значение используемой константы равно:

 ${paths.dist} ='dist';
  

Ответ №1:

В официальной del документации указано следующее:

Глобальный шаблон ** соответствует всем дочерним элементам и родительскому.

Так что это не сработает:

 del.sync(['public/assets/**', '!public/assets/goat.png']);
  

Вы также должны явно игнорировать родительские каталоги:

 del.sync(['public/assets/**', '!public/assets', '!public/assets/goat.png']);
  

В вашем случае вы удаляете dist/client/** , который включает в себя сам каталог dist/client . Если вы просто проигнорируете, dist/client/assets/** dist/client каталог все равно будет удален.

Вам нужно явно игнорировать dist/client каталог:

 gulp.task('clean:dist', () => {
   del.sync([
    `${paths.dist}/!(.git*|.openshift|Procfile)**`,
    `${paths.dist}/client/**`,
    `!${paths.dist}/client`,
    `!${paths.dist}/client/assets/**`]);
});
  

Комментарии:

1. Идеальный. Спасибо 🙂