Перемещение файлов из нескольких каталогов с помощью Gulp также копирует каталоги - PullRequest
1 голос
/ 10 июня 2019

Я настраиваю gulp, чтобы переместить все мои html-файлы из разных модулей в одну папку представлений. Внутри папки модулей каждая папка модуля имеет одинаковую структуру

имя_модуля / клиент / просмотров / anyFile.html

Я написал глоток 'move-html'.

gulp.task('move-html', function(){
    return gulp.src('./modules/*/client/views/*.html')
    .pipe(htmlmin({ collapseWhitespace: true }))
    .pipe(gulp.dest('./public/views'));
});

Я ожидал, что все html-файлы из всех модулей будут скопированы в ./public/views, но вместо этого я обнаружил, что скопированы все структуры модулей.

Ожидаемое: index.html

Фактическая выработка: приложение | -client | Вид | -Index.html

Я предполагаю, что это связано со звездочкой после модуля /, но не могу найти ответ альтернативным путем.

Когда я использую имя файла в gulp.src, оно работает нормально, например. ./modules/app/client/views/*.html

1 Ответ

2 голосов
/ 10 июня 2019

Вы правы в том, что часть пути, предшествующего *, важна здесь. Это сформирует base пути. Но это не то, что вы хотите. Вы хотите исключить части пути, которые включают и следуют *. Самый простой способ сделать это - gulp-flatten , пакет, который удалит указанные родительские каталоги.

В вашем случае вы можете просто удалить их все так:

.pipe(flatten())  

оставляя только сами имена файлов, которые затем можно поместить в любые каталоги, которые вы хотите. Итак:

const flatten = require("gulp-flatten");

gulp.task('move-html', function(){
  return gulp.src('./modules/**/client/views/*.html')
    .pipe(htmlmin({ collapseWhitespace: true }))

    .pipe(flatten())

    .pipe(gulp.dest('./public/views'));
});

Теперь у вас будет ./public/views/*.html, как вы хотели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...