GULP SRC |Негативы не работают, как ожидалось - PullRequest
0 голосов
/ 24 ноября 2018

Я пытался понять, как работает 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, отменяются. Есть мысли?

...