以下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()
,上述设置无法正常工作吗?
答案 0 :(得分:1)
所以评论中提出的要点; return
似乎没有丢掉一口气;您正在使用最新版本的gulp-less,从语法角度来看,您的任务看起来还不错。
这方面的主要内容是项目结构非常重要,因此当您指定诸如**/*.less
之类的glob时,您必须知道它可以匹配哪些文件;在这种情况下,glob太贪婪,并且会匹配node_modules
中可能与您的项目相关或不相关的内容。由于gulp.src
是一项昂贵的操作,因此将源文件组织到目录中并将glob
的范围限制在这些目录中是一种很好的做法。
一个更好的glob模式就像./lib/styles/**/*.less
一样 - 这样你就可以适当地限制整个cm,你也可以将较少的文件放在一个地方。因此,您的gulp任务应如下所示:
gulp.task("less-compile", function () {
return gulp.src("./lib/styles/**/*.less")
.pipe(less())
.pipe(gulp.dest("./dist/css"));
});
答案 1 :(得分:0)
我遇到了类似的问题,并通过在package.json中将已安装的gulp版本从3.8.7更改为3.8.5来解决它:
"devDependencies": {
"gulp": "3.8.5"
}
新版本中的更改或错误必须阻止管道(gulp.src(' 。'))解析返回语句。