【发布时间】:2016-01-22 05:50:27
【问题描述】:
我正在尝试重建我的 gulp 文件以提高效率,但我无法让我的 styles 任务仅在文件已更改时进行编译。
我找到了this question,但答案似乎对我不起作用。
假设我的仓库是这样组织的:
/dev
/assets
/styles
all.css
/src
/assets
/styles
all.scss
_header.scss
gulpfile.js
package.json
如果我的任何一个 Sass 文件发生了更改,我只想覆盖 all.css。因此,如果我将 _header.scss 保存在哪里,但没有进行任何更改,并运行我的 styles 任务,它应该意识到代码没有更改并且不会覆盖 all.css。
根据我上面链接的问题,我正在查看gulp-cached,但这似乎对我不起作用。这是最基本的任务:
var gulp = require("gulp"),
cached = require("gulp-cached"),
sass = require("gulp-sass");
gulp.task("styles", function() {
return gulp.src(src + "/assets/styles/all.scss")
.pipe(sass().on("error", sass.logError))
.pipe(cached("sass_compile")) // should skip the dest if cache is the same
.pipe(gulp.dest(dev + "/assets/styles"));
});
cached 管道在这种情况下似乎不起作用。我运行gulp styles,它仍然覆盖 all.css,即使没有进行任何更改,即使我什至没有重新保存文件。
我最终想使用的更复杂的任务是:
var gulp = require("gulp"),
cached = require("gulp-cached"),
sourcemaps = require("gulp-sourcemaps"),
sass = require("gulp-sass"),
autoprefixer = require("gulp-autoprefixer"),
// set up environment paths
src = "./src",
dev = "./dev",
dist = "./dist";
gulp.task("styles", function() {
return gulp.src(src + "/assets/styles/all.scss")
.pipe(sourcemaps.init())
.pipe(sass().on("error", sass.logError))
.pipe(autoprefixer("last 2 version", "ie 8", "ie 9"))
.pipe(sourcemaps.write())
.pipe(cached("sass_compile")) // should skip the dest if cache is the same
.pipe(gulp.dest(dev + "/assets/styles"));
});
非常感谢您对此提供一些指导。非常感谢。
编辑 1:请注意,此演示中的 all.scss 仅包含 @import "_header";。
编辑 2: 好的,我刚刚发现 gulp-cached 似乎在 watch 任务中工作正常。所以修改了问题:我怎样才能在监视任务之外获得这种相同类型的功能?
【问题讨论】:
标签: node.js sass gulp gulp-sass gulp-cached