【问题标题】:Glob matching, exclude all JS filesglob匹配,排除所有JS文件
【发布时间】:2023-12-14 11:49:02
【问题描述】:

我是 gulp.js 的新用户。我想将所有非 JavaScript 文件移动到构建目录。我现在得到的是这样的:

//Test copy
gulp.task('test-copy', function() {
    gulp.src(['myProject/src/**/*.!(js|map|src)'])
        .pipe(gulp.dest('myProject/build'));
});


//Results for various files
myProject/css/style.css //Copied - GOOD
myProject/html/index.html //Copied - GOOD
myProject/js/foo.js //Not Copied - GOOD
myProject/js/bar.min.js //Copied - BAD!
myProject/js/jquery-2.0.3.min.js //Copied - BAD!
myProject/js/jquery-2.0.3.min.map //Copied - BAD!

如您所见,它只匹配文件路径字符串中的第一个点之后,而不是最后一个点,如我所愿。如何修改 glob 搜索字符串以使其行为符合我的意愿?

【问题讨论】:

  • 我没用过 gulp,但是你能在传递给 gulp.src 的模式末尾加一个 $ 吗?
  • 不,很遗憾这不是正则表达式,而是extglob 语法。

标签: node.js pattern-matching glob gulp


【解决方案1】:

试试这个 glob 模式:

myProject/src/**/!(*.js|*.map|*.src)

【讨论】:

  • 工作就像一个魅力。对于未来的落后者,这会导致我的 .json 清单文件也被排除在外的问题。我像这样修改了脚本,这意味着它仍然复制 config.js*.json 文件:myProject/src/**/*(config.js|*.json|!(*.js|*.src|*map))
  • 这对于与节点的grunt-sshminimatch 进行文件匹配非常有帮助。
  • 这很烦人,即使它看起来很常见。