Node.js glob 包含/排除文件

标签 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. 删除所有 js 和 sass 文件,因为它们会被编译/连接/缩小并复制到另一个任务中构建
  3. 但是console.js和cordova.js必须被复制,所以我想将它们重新包含到glob中

嗯,我认为 globArray 中的元素顺序是一个优先级或其他东西,例如console.js 在被过滤掉后被重新包含。看来并非如此:(

我能做什么?

最佳答案

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

  • gulp-util
  • gulp 重命名

    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}));

然后您所要做的就是查看日志中的输出以查看正在处理哪些文件,然后相应地更新您的通配符。

此外,您最好逐一或成对地测试您的路径,看看您是否走在正确的轨道上,这样当所有 glob 都未按预期工作时您就不会不知所措。隔离 glob 问题并进行相应更新。

这也只是一个让你走上正轨的提示,这个 glob:

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

需要:

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

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

关于Node.js glob 包含/排除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26226573/

相关文章:

java - 向 Heroku Node js 应用程序发送 httprequest 在客户端出现 "connection refused"错误

javascript - 像普通用户一样使用你的机器人

javascript - 我的 gulp 任务到 "concat"和 "dest"我的 .css 文件,仅在我运行 2 次时才运行

javascript - Gulp 和 Bower 集成

node.js - Glob 和 NPM Minimatch : Match all files and directories recursively except for specific directories

文本后的 Bash globstar 匹配

javascript - Node.js 什么是对象克隆?

node.js - 招摇生成 Nodejs : Error: request entity too large

javascript - 如何用自定义参数替换字符串参数?

javascript - 如何使用 npm 更新特定的子包版本