所以我使用Gulp
Sass
和gulp-changed
(我已经尝试了更新语法更改的gulp-newer)并观看所有scss
个文件在我的文件夹中。
当我更改基础scss
文件时,它将编译没有任何问题。
但是如果我更改了部分内容,它就不会编译那个依赖于该部分的sass文件。
咕嘟咕嘟
var SRC = './stylesheets/**/*.scss';
var DEST = './stylesheets';
gulp.task('sass', function() {
return gulp.src(SRC)
.pipe(changed(DEST, { extension: '.css' }))
.pipe(plumber({
errorHandler: handleErrors
}))
.pipe(sourcemaps.init())
.pipe(sass({
includePaths: [
'C:/var/www/mobile 2/stylesheets'
]}))
.pipe(sourcemaps.write('./'))
.on('error', handleErrors)
.pipe(gulp.dest(DEST))
});
文件夹
├── scss
│ └── base.scss
│ ├── _partial1.scss
│ └── _partial2.scss
│ └── anotherBase.scss
│ ├── _anotherBasePartial1.scss
│ └── _anotherBasePartial2.scss
对所做的base.scss || anotherBase.scss
更改进行更改,对partial1.scss
进行任何更改。
正如您在日志中看到的那样:
[15:14:02] Starting 'sass'... //here i changed _partial1.scss
[15:14:03] Finished 'sass' after 248 ms
[15:18:20] Starting 'sass'...
[15:18:20] Finished 'sass' after 289 ms
[BS] File changed: c:\var\www\mobile 2\stylesheets\sitescss\responsive\tools\base.css
[15:18:24] Starting 'sass'...
[15:18:24] Finished 'sass' after 289 ms
[BS] File changed: c:\var\www\mobile 2\stylesheets\sitescss\responsive\tools\anotherBase.css
我希望每当部分更改时编译scss。
答案 0 :(得分:5)
节目有点迟,但如果我理解你的话;你想在更改任何scss文件时运行你的构建,无论是否是部分,对吧? (但不包括构建本身的部分 - 因为它由sass @import处理)。
我通常使用这种方法:
var scss_source = [ 'path/to/scss' ],
partials_source = [ 'path/to/partials' ];
gulp.task('scss', function () {
gulp.src( scss_source )
...
});
var scss_watcher = gulp.watch([ scss_source, partials_source ], [ 'scss' ]);
我只将scss_source传递给构建版本,但是两个源代码都传递给了观察者。这样我可以从其他scss源中分离所有部分,但是对任何触发构建的文件都进行了更改。而且我不必包含另一个处理此问题的模块。
我通常将我的部分保存在不同的目录中(想想共享,而不是与其他scss文件混合)。
希望这对你的情况有意义 - 否则我会道歉。
答案 1 :(得分:1)
试
ClientId
如果partials位于同一个文件夹或子文件夹中。
答案 2 :(得分:0)
这可能更多地与你如何包含部分内容有关 - 你的@imported部分到你的基本sass文件?
即,base.scss有
@import 'partial1';
@import 'partial2';
那里的某个地方?
修改强>
好吧我刚遇到类似的问题,我最后只是使用gulp-newer +循环数组来生成gulp任务。所以它看起来像
var sassMain = ['base', 'anotherBase'];
sassMain.forEach(current, function() {
var src = current + '.scss';
return gulp.src(src)
.pipe(newer(destination)
.pipe(plumber())
.pipe(sass())
.pipe(gulp.dest(destination))
});
这并不是世界上最灵活的东西(特别是对于基本网址的嵌套目录),但有点像你想要的那样。如果没有这个技巧,gulp-cached也几乎可以获得你想要的位置,但是具有相同的NOT-compile-partials问题。
答案 3 :(得分:0)
https://www.npmjs.com/package/gulp-changed
默认情况下,它只能检测流中的文件 改变。
我猜你可能想要这个:https://github.com/floatdrop/gulp-watch
答案 4 :(得分:0)
我使用https://github.com/vigetlabs/gulp-starter作为https://github.com/berstend/gulp-sass-inheritance
的模板它有效但只有2级深度
var gulp = require('gulp');
var debug = require('gulp-debug');
var browserSync = require('browser-sync');
var sass = require('gulp-sass');
var sourcemaps = require('gulp-sourcemaps');
var handleErrors = require('../lib/handleErrors');
var autoprefixer = require('gulp-autoprefixer');
var path = require('path');
var cached = require('gulp-cached');
var sassInheritance = require('gulp-sass-inheritance');
var gulpif = require('gulp-if');
var filter = require('gulp-filter');
var duration = require('gulp-duration');
var notify = require('gulp-notify');
var paths = {
src : 'app/styles',
dest: 'grails-app/assets'
}
var isPartial = function (file) {
return /_/.test(file.relative);
}
//set global.isWatching = true on gulp watch
gulp.task('css', function () {
return gulp.src(paths.src)
//.pipe(debug({title: 'before cache:'}))
.pipe(gulpif(global.isWatching, cached('sass')))
//.pipe(gulpif(global.isWatching, debug({title: 'after cache:'})))
.pipe(gulpif(isPartial, sassInheritance({dir: path.join(config.root.src, config.tasks.css.src), debug: false}).on('error', handleErrors))) //,
.pipe(debug({title: 'after sassInheritance:'}))
//.pipe(debug({title: 'after filter:'}))
.pipe(sourcemaps.init())
.pipe(sass()).on('error', handleErrors)
.pipe(debug({title: 'after sass:'}))
//.pipe(notify('Sass compiled <%= file.relative %>'))
.pipe(autoprefixer(config.tasks.css.autoprefixer))
.pipe(sourcemaps.write())
.pipe(gulp.dest(paths.dest))
//.pipe(duration('after sass'))
.pipe(debug({title: 'before browserSync:'}))
.pipe(browserSync.reload({stream: true}))
})
答案 5 :(得分:0)
这是一个很好的问题。我遇到了这个问题,经过大量的时间摆脱了这个问题。因为当时我在网上找不到消除这些问题的方法。
无礼
main.scss
@import 'sass/abstracts/base';
const gulp = require('gulp');
const sass = require('gulp-sass');
const rename = require('gulp-rename');
const browserSync = require('browser-sync');
const gulpSequence = require('gulp-sequence');
const sassInheritance = require('gulp-sass-inheritance');
const filter = require('gulp-filter');
var cached = require('gulp-cached');
var gulpif = require('gulp-if');
gulp.task('sass', function() {
return gulp.src('sass/main.scss')
//filter out unchanged scss files, only works when watching
.pipe(gulpif(global.isWatching, cached('sass')))
//find files that depend on the files that have changed
.pipe(sassInheritance({dir: 'sass'}))
.pipe(filter(function (file) {
return !/\//.test(file.path) || !/^_/.test(file.relative);
}))
.pipe(sass())
.pipe(rename('style.compile.css'))
.pipe(gulp.dest('css/'))
.pipe(browserSync.stream());
})
gulp.task('serve', ['sass'], function () {
browserSync.init(
{
server: "./"
}
);
gulp.watch('sass/abstracts/**/*.scss', ['sass']);;
gulp.watch('index.html').on('change', browserSync.reload);
});
运行gulp serve
。