javascript - 包括/排除 gulp.src 的 glob

标签 javascript node.js gulp glob minimatch

我正尝试在 gulp 中为我的 javascript concat 构建任务设置一个 glob 数组。目录结构如下:

├── about
│   └── about.js
├── assets
├── contact
├── core
│   ├── navbar
│   │   ├── navbar.js
│   │   └── navbar.test.js
│   ├── routing.js
│   ├── routing.test.js
│   ├── utils.js
│   └── utils.test.js
├── generated
│   ├── footer.js
│   ├── header.js
│   └── templates.js
├── home
├── app.js
└── config.js

文件的顺序很重要:

  1. 生成/header.js
  2. 应用程序.js
  3. 任何 *.js 文件,除了下面的文件
  4. 生成/templates.js
  5. 生成/footer.js

狂野地尝试了各种通配符组合,但通配符对我来说并不强。

var inputFiles = [
  'generated/header.js',
  'app.js',
  '!(generated)**/*.js',    // <=---- ???
  'generated/templates.js',
  'generated/footer.js',
  '!**/*.test.js'
];

那么我如何包含所有 *.js 文件,子目录中的文件除外?

谢谢。

最佳答案

我想到的最好的:

var gulp = require('gulp');
var tap = require('gulp-tap');

gulp.task('default', function() {
    return gulp.src([
        'generated/header.js',
        'app.js',
        '*.js',
        './!(generated)/**/*.js', // <- All subdirs except 'generated'
        'generated/{templates,footer}.js',
        '!**/*.test.js',
        '!node_modules/**'
    ]).pipe(tap(function(file) {
        console.log(file.path);
    }));
});

运行它:

∴ glob-test gulp
[20:07:51] Using gulpfile ~/Desktop/glob-test/gulpfile.js
[20:07:51] Starting 'default'...
/Users/heikki/Desktop/glob-test/generated/header.js
/Users/heikki/Desktop/glob-test/app.js
/Users/heikki/Desktop/glob-test/config.js
/Users/heikki/Desktop/glob-test/gulpfile.js
/Users/heikki/Desktop/glob-test/about/about.js
/Users/heikki/Desktop/glob-test/core/routing.js
/Users/heikki/Desktop/glob-test/core/utils.js
/Users/heikki/Desktop/glob-test/core/navbar/navbar.js
/Users/heikki/Desktop/glob-test/generated/templates.js
/Users/heikki/Desktop/glob-test/generated/footer.js
[20:07:51] Finished 'default' after 326 ms

主要技巧是避免“!”包含文件时 glob 开头的字符。

https://github.com/isaacs/minimatch#comparisons-to-other-fnmatchglob-implementations

“如果模式以 ! 字符开头,则它被取反。”

附言。否定 glob 的放置无关紧要。他们总是在幕后被移到最后。

关于javascript - 包括/排除 gulp.src 的 glob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26563048/

相关文章:

javascript - 使用逻辑运算符有条件地启用/禁用按钮元素

javascript - JSON 相关的动态下拉值未定义

node.js - 更新mongodb中的大量文档

javascript - Node js将同一url上的应用程序按特定路径分开

sql - Node.js - sqlstring 替代方案,允许命名替换

javascript - 允许数字或特殊字符的正则表达式

javascript - 如何将 javascript 与 typescript 编译成一个包?

尽管渲染输出很好,但 Gulp-twig 控制台显示 "Error parsing twig template"

Gulp - 在排除 .min.js 和 .js.map 的同时遍历所有 .js

javascript - 如何在云功能中获取 firebase 数据库数据?