GULP SRC |负面因素未能按预期工作

时间:2018-11-24 14:14:05

标签: gulp src

我试图了解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 glob中首先选择的所有文件。有什么想法吗?

0 个答案:

没有答案