Node.js glob包含/排除文件

时间:2014-10-06 23:51:32

标签: node.js gulp minimatch node-glob

这是我当前的代码,用于将相关文件从我的源代码复制到我的构建目录。它按预期工作

return gulp.src([
    'src/**/*',
    '!src/**/*(*.sass|*.scss|*.js)',
    '!src/(components|config|elements|less|sass|scss|platforms)',
    'src/console.js',
    'src/cordova.js',
    'src/config.xml',
]).pipe(plugins.copy("www", {prefix: 1}));

我的想法是:

  1. 选择src
  2. 中的所有文件和文件夹
  3. 删除所有js和sass文件,因为它们被编译/连接/缩小并复制以构建另一个任务
  4. 但是必须复制console.js和cordova.js,所以我想将它们重新包含在glob中
  5. 好吧,我认为globArray中的元素顺序是一个优先级或类似的东西,例如在过滤掉后,console.js会被重新包围。它似乎不是这样:(

    我该怎么办?

1 个答案:

答案 0 :(得分:3)

因此,您面临的真正问题是缺乏“调试”的能力。或者'检查' gulp流中当前正在处理的内容。在我的工作流程中,有两个不可替代的gulp插件可以帮助找出正在发生的事情:

  • 吞-util的
  • 吞掉-重命名

    var gutil = require(' gulp-util'); var rename = require(' gulp-rename');

现在,尝试将此代码段附加到您的示例中,如下所示:

var gutil = require('gulp-util');
var rename = require('gulp-rename');
.....

return gulp.src([
    'src/**/*',
    '!src/**/*(*.sass|*.scss|*.js)',
    '!src/(components|config|elements|less|sass|scss|platforms)',
    'src/console.js',
    'src/cordova.js',
    'src/config.xml',
]).pipe(rename(function(filepath) {
          gutil.log(filepath.basename);
})).pipe(plugins.copy("www", {prefix: 1}));

然后你要做的就是查看日志中的输出以查看正在处理的文件,然后相应地更新你的globbing。

此外,你最好逐个或成对地测试你的路径,看看你是否在正确的轨道上,所以当所有的球都没有按预期工作时你不会被淹没。隔离glob问题并相应地更新。

这只是一个让你走上正确轨道的暗示,这个全球:

'!src/**/*(*.sass|*.scss|*.js)'

需要:

'!src/**/*.{sass,scss,js}'

我希望这能让你走上正轨!