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
我不明白那个问题。我认为 return
由 gulp.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 语句。
以下 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
我不明白那个问题。我认为 return
由 gulp.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 语句。