Gulp 任务不包含子文件夹

Posted

技术标签:

【中文标题】Gulp 任务不包含子文件夹【英文标题】:Gulp Task does not include subfolders 【发布时间】:2019-03-06 07:14:56 【问题描述】:

我正在尝试为 eslint 设置 Gulp 任务(系统:OS Windows 10)。但似乎没有正确评估 src:

gulp.task('lint-app-basic-an', function() 
    gulp.src('src/main/webapp/app-basic-an/**/*.js')
        .pipe(eslint(
            configFile: '.eslintrc.js'
        ))
        .pipe(eslint.format())
        .pipe(eslint.failAfterError());
);

src/main/webapp/app-basic-an 下有几个子文件夹,例如

src/main/webapp/app-basic-an/components/page-header/page-header.component.js

如果我在上述 JS 文件中创建了一个 lint 错误,它会被 linter 忽略。如果我在任务 .src-function 中指定路径 1 级别,例如

gulp.src('src/main/webapp/app-basic-an/components/**/*.js')

它突然起作用了,这对我来说毫无意义,我以为“**/”意味着零个或多个子目录?

【问题讨论】:

你应该返回流,否则 gulp 不知道它应该等待(即添加return gulp.src('...)。 解决了,谢谢!虽然我不明白为什么......你能解释一下吗? 【参考方案1】:

Gulp 以异步方式执行其任务。为了让 gulp 能够知道某些任务已经完成,这些任务需要做 one of the following:

返回流(例如 gulp.src 创建的流),gulp 可以在其上侦听 for end event, 返回q承诺或 调用作为任务函数参数传递的回调函数

如果任务不接受参数并且不返回承诺或流,gulp 认为该任务是同步的(即,一旦函数调用返回,它就完成了)。一旦所有任务完成,执行就会停止......因此,如果您有一些异步处理,它将永远不会完成(或更糟 - 它可能会在随机点结束)。

【讨论】:

谢谢!但这并不能解释为什么 gulp.src('src/main/webapp/app-basic-an/**/*.js') 不起作用,但 gulp.src('src/main/webapp/app-basic-an/components/**/*.js') 起作用,对吗?这对我来说很奇怪....不过,感谢您的回答! 您需要深入了解 glob 流orchestrator 实现才能知道答案。正如我所写 - 如果没有适当的异步处理,行为是未定义的,并且您处于竞争条件的领域(“工具会在处理某些文件夹之前还是之后退出?”)。

以上是关于Gulp 任务不包含子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

gulp基本操作

Gulp-sass 无法编译 scss 文件

gulp-sequence不工作

Gulp 循环配置文件和合并任务...慢

Gulp任务运行不正常

Gulp 4 由于缺少获取功能,使用 Gulp-Hub 跨多个文件拆分任务失败