首页 > 解决方案 > 咕噜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

但是关于文档(gulp,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

据我了解,** 包括 assets/sub02 文件夹作为文件夹。因此 dest 将文件夹复制为文件夹,除非在 src first glob 中首先选择的所有文件都被否定。有什么想法吗 ?

标签: gulpsrc

解决方案


推荐阅读