Gulp 返回流时不起作用

Gulp does not work when returning stream

以下 Gulp 设置不起作用:

var templateCache = require("gulp-angular-templatecache");
var less = require("gulp-less");

gulp.task("angular-templates", function(){
      return gulp.src(TEMPLATES_SOURCES)
        .pipe(templateCache(TEMPLATES_JS, {module: "moonwalk", root: TEMPLATES_ROOT}))
        .pipe(gulp.dest("Temp/"));
});

gulp.task("less-compile",function(){
      return gulp.src("**/*.less")
        .pipe(less())
        .pipe(gulp.dest("./"));
});

gulp.task("release-assets", ["angular-templates", "less-compile"], function() {

    return gulp.src("./Content/**/*.cshtml")
        .pipe(gulp.dest("Dist/"));
});

当我运行 gulp release-assets 时,输出如下:

[01:24:06] Starting 'angular-templates'...
[01:24:06] Starting 'less-compile'...
[01:24:06] Finished 'angular-templates' after 605 ms

...不好...

但是,如果我通过像这样删除 return 来更改第二个任务:

gulp.task("less-compile",function(){
       gulp.src("**/*.less")
        .pipe(less())
        .pipe(gulp.dest("./"));
});

然后设置就可以了!? gulp release-assets 的输出是:

[01:21:54] Starting 'angular-templates'...
[01:21:54] Starting 'less-compile'...
[01:21:54] Finished 'less-compile' after 2.89 ms
[01:21:54] Finished 'angular-templates' after 741 ms
[01:21:54] Starting 'release-assets'...
[01:22:03] Finished 'release-assets' after 8.9 s

我不明白那个问题。我认为 returngulp.src()?

提供的流是强制性的

有人可以解释一下,如果我在 gulp.src() 上 return,为什么上面的设置不起作用?

所以评论中提出的要点; return 不像是在甩gulp;您正在使用最新版本的 gulp-less,从语法的角度来看,您的任务看起来不错。

从中得出的主要结论是项目结构非常重要,因此当您指定诸如 **/*.less 之类的 glob 时,您必须知道它可以匹配哪些文件;在这种情况下,glob 过于贪婪并且会匹配 node_modules 中可能与您的项目相关或不相关的内容。因为 gulp.src 是一项昂贵的操作,所以将源文件组织到目录中并将 glob 的范围限制在这些目录中是一个很好的做法。

更好的 glob 模式应该类似于 ./lib/styles/**/*.less - 这样你既可以适当地确定 glob 的范围,又可以将 less 文件放在一个地方。因此,您的 gulp 任务应如下所示:

gulp.task("less-compile", function () {
    return gulp.src("./lib/styles/**/*.less")
        .pipe(less())
        .pipe(gulp.dest("./dist/css"));
});

我遇到了类似的问题,通过在 package.json:

中将安装的 gulp 版本从 3.8.7 更改为 3.8.5 解决了这个问题
  "devDependencies": {
    "gulp": "3.8.5"
  }

必须是较新版本中的更改或错误,阻止管道 (gulp.src('.')) 解析 return 语句。