我已经看到了许多与此相关的问题,但我还没有找到所需的解决方案。
问题: 当我在项目中使用 sass 文件或 js 文件时,我想在这些文件被更改时编译/jshint。所以我使用grunt-contrib-watch来做到这一点。它工作正常,但是在某些文件更改后,它正在跟踪文件更改,但它停止编译(停止运行任务,该任务必须在文件更改时运行)。
代码 :
module.exports = function (grunt) {
grunt.initConfig({
config: {
PROJECT_DIR: "Project"
},
sass: {
current: {
options: {
style: 'expanded',
lineNumber: true,
sourcemap: 'none',
update: true
}
}
},
jshint: {
all: []
},
watch: {
sass: {
files: ['<%= config.PROJECT_DIR %>**/sass/*.scss'],
tasks: ['sass:current'],
options: {
spawn: false,
debounceDelay: 2000
}
},
js: {
files: ['<%= config.PROJECT_DIR %>**/js/*.js'],
tasks: ['jshint'],
options: {
spawn: false,
debounceDelay: 2000
}
}
}
});
grunt.event.many('watch', 10, function (action, filepath, target) {
var paths = new cleanPaths(filepath);
var filepath = paths.filepath;
var dirpath = paths.dirpath;
switch (target) {
case 'sass':
if (grunt.file.isMatch(grunt.config('watch.sass.files'), filepath)) {
grunt.config('sass.current.src', filepath);
grunt.config('sass.current.dest', filepath.replace('sass/', 'css/').replace('.scss', '.css'));
// pushFile(filepath, filepath.replace('sass/', 'css/').replace('.scss', '.css'));
}
break;
case 'js':
if (grunt.file.isMatch(grunt.config('watch.js.files'), filepath)) {
grunt.config('jshint.all', [filepath]);
// pushFile(filepath)
}
break;
default:
break;
}
});
grunt.registerTask('default', ['watch']);
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-jshint');
};
我正在动态更新 sass 配置( src 和 dest 值)。
包.json
{
"name": "",
"version": "1.0.0",
"main": "Gruntfile.js",
"scripts": {},
"author": "",
"license": "",
"description": "",
"devDependencies": {
"grunt-contrib-jshint": "^1.0.0",
"grunt-contrib-sass": "^1.0.0",
"grunt-contrib-watch": "^1.0.0"
}
}
即使在 sass 代码中没有错误时也会停止编译。
我正在使用最新版本的 grunt-contrib-watch 插件。