これに関連する多くの問題を見てきましたが、望ましい解決策が見つかりませんでした。
問題 : プロジェクトで 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"
}
}
コンソール画像リンク: https://cloud.githubusercontent.com/assets/8776227/16587119/b7bfb332-42e6-11e6-8281-789ef60d22ec.png
sass コードにエラーがない場合でもコンパイルを停止します。
grunt-contrib-watch プラグインの最新バージョンを使用しています。