咕嘟咕嘟咕嘟咕嘟咕嘟咕嘟咕嘟咕嘟咕

我正在使用gulp-inject来自动添加SASS导入,因为它们是在我的项目中新build的。 这工作正常,新的SASS文件被正确导入,但是当已经导入的文件被删除,而gulp-watch正在运行它崩溃与以下错误:

Error: _dev\style\style.scss Error: File to import not found or unreadable: components/_test - Copy.scss Parent style sheet: stdin on line 2 of stdin >> @import "components/_test - Copy.scss"; 

我已经花了好几个小时试图弄清楚为什么它试图编译过时的导入的旧版本的样式表。 我在SASS任务上设置了一个延迟,并且在运行的时候,实际文件中的导入是正确的。 我已经读过了,可能是caching的stylehseet,但真的不知道。

下面是我的Gulp文件的相关位,在底部是一个链接到我的完整吞噬文件。

这是我的监视任务:(组件任务触发SASS任务)

 // SASS plugins.watch([paths.dev+'/**/*.scss',!paths.dev+'/style/components/**/*.scss'], function () {gulp.start(gulpsync.sync([ 'build-sass' ]));}); // COMPONENTS plugins.watch(paths.dev+'/style/components/**/*.scss', function () {gulp.start(gulpsync.sync([ 'inject-deps' ]));}); 

SASS任务

 gulp.task('build-sass', function() { // SASS return gulp.src(paths.dev+'/style/style.scss') .pipe(plugins.wait(1500)) .pipe(plugins.sass({ noCache: true })) .pipe(gulp.dest(paths.tmp+'/style/')); }); 

注入任务

 gulp.task('inject-deps', function() { // Auto inject SASS gulp.src(paths.dev+'/style/style.scss') .pipe(plugins.inject(gulp.src('components/**/*.scss', {read: false, cwd:paths.dev+'/style/'}), { relative: true, starttag: '/* inject:imports */', endtag: '/* endinject */', transform: function (filepath) { return '@import "' + filepath + '";'; } })) 

完整的GULP文件: https ://jsfiddle.net/cwu0m1cp/

这里要求的是带有导入的SASS文件,只要watch任务没有运行,导入的文件就不包含CSS:

SASS文件删除前:

 /* inject:imports */ @import "components/_test.scss"; @import "components/_test-copy.scss"; /* endinject */ 

删除后的SASS文件:

 /* inject:imports */ @import "components/_test.scss"; /* endinject */ 

无论何时删除style/components/的文件,都会启动build-sass任务。 那时inject-deps任务还没有运行,所以相应的@import还没有被删除。

发生这种情况的原因是因为这一行:

 plugins.watch([paths.dev+'/**/*.scss',!paths.dev+'/style/components/**/*.scss'] 

你实际上并没有创build一个string! 在这里开始。 您正在否定 paths.devstring,其值为falsepaths.dev JavaScript!)。 所以你的path最终是'false_dev/style/components/**/*.scss'

应该是这个,而不是:

 plugins.watch([paths.dev+'/**/*.scss','!' + paths.dev+'/style/components/**/*.scss'] 

(不用担心,我花了更长时间才能弄清楚它应该怎样)