Я пытался понять, как работает gulp, и, в частности, как выбирать файлы, поэтому я провел несколько тестов.Но результаты не такие, какими они должны были быть.
Может кто-нибудь объяснить мне, почему я получаю результаты этих тезисов и если это был ожидаемый результат.
Набор файлов
assets
|-script01.js
|--sub01
|-script02.js
|-script03.js
|--sub02
|-script04.js
|--sub03
|-script05.js
Моей целью было не получить все файлы, кроме всей папки sub02.Довольно просто, как казалось:)
gulpfile.js
const { src, dest } = require('gulp');
exports.test01 = function() {
return src(['assets/**/*', '!assets/sub02'])
.pipe(dest('output/'))
}
Но результат был
// output
// |-script01.js
// |--sub01
// |-script02.js
// |-script03.js
// |--sub02
// |-script04.js
// |--sub03
// |-script05.js
Так что я запустил разные тесты, такие как
exports.test02 = function() {
return src(['assets/**/*', '!assets/sub02/*'])
.pipe(dest('output/'))
}
Какой вывод
output
|-script01.js
|--sub01
|-script02.js
|-script03.js
|--sub02
|--sub03
|-script05.js
Тогда я попробовал это
exports.test03 = function() {
return src(['assets/**/*', '!assets/sub02/**/*'])
.pipe(dest('output/'))
}
Что логически приводит к
output
|-script01.js
|--sub01
|-script02.js
|-script03.js
|--sub02
И, наконец, я понял, как выполнить то, что яРазыскивается
exports.test04 = function() {
return src(['assets/**/*', '!assets/sub02/**/*', '!assets/sub02'])
.pipe(dest('output/'))
}
Ууу!
output
|-script01.js
|--sub01
|-script02.js
|-script03.js
Но что касается документа (глотка, https://gulpjs.com/docs/en/getting-started/explaining-globs), Я должен быть в состоянии выполнить тест 01
exports.test05 = function() {
return src(['**/*.js', '!node_modules/'])
.pipe(dest('output/'))
}
// Result : all directories and their .js files in output
// including node_mudules ones.
И вот еще один бонусный вопрос. Выполняя тесты, я попробовал это. Но не сработал ни один. Почему?
// --- BONUS QUESTION
exports.bonus = function() {
return src(['assets/**/*', '!assets/sub02/**/*', 'assets/sub02/script04.js'])
.pipe(dest('output/'))
}
output
|-script01.js
|--sub01
|-script02.js
|-script03.js
|--sub02
* script04.js missing :( *
Если вы хотите проверить это быстро:
mkdir -p assets assets/sub01 assets/sub02/sub03 output;
touch assets/script01.js assets/sub01/script02.js assets/sub01/script03.js assets/sub02/script04.js assets/sub02/sub03/script05.js
Большое спасибо заранее!
РЕДАКТИРОВАТЬ
После дальнейшего изучения, это работает до
exports.test01 = function() {
return src(['assets/**/*.js', '!assets/sub02/**/*.js'])
.pipe(dest('output/'))
}
// output
// |-script01.js
// |--sub01
// |-script02.js
// |-script03.js
Так, как я понимаю, ** включает активы / sub02папка как папка. Таким образом, dest копирует папку как папку, кроме случаев, когда все файлы, впервые выбранные в src first globs, отменяются. Есть мысли?