全局匹配,排除所有JS文件

69

我是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的模式末尾添加$吗? - James Manning
2
不好意思,这不是正则表达式,而是extglob语法。 - AlexZ
1个回答

151

尝试这个全局模式:

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

30
运作得非常好。对于未来的后来人,这导致一个问题,即我的.json清单文件也被排除在外。我修改了脚本,像这样进行修改,这意味着它仍然会复制config.js*.json文件:myProject/src/**/*(config.js|*.json|!(*.js|*.src|*map)) - AlexZ
这对于使用Node的grunt-sshminimatch进行文件匹配非常有帮助。 - craig
2
尽管这似乎是一件很常见的事情,但很难找到它,这真的很烦人。 - Bill Criswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接