私は同じ問題を抱えています。私はregarde:file
イベントを使って解決しました。
最初に、regarde:file
イベントを使用して変更されたファイルをリッスンします。これにより、ソースロケーション内のファイルが削除されている場合はclean:coffee
、ファイルが変更/追加された場合はcoffee:refresh
の2つのタスクの設定が入力されます。
次に、regarde
タスクはタスクをトリガーし、refresh:coffee
(coffee:refresh
と間違えないでください)を起動します。このタスクでは、clean:coffee
および/またはcoffee:refresh
の設定が追加されているかどうかを確認し、必要に応じてこれらのタスクを実行します(機能grunt.task.run
経由)。また、フラグをリセットすると、次に受信したregarde:file
イベントが再び構成をクリーンアップします。深さの説明では
:すべての
まず、regarde
設定:
// watch for changed coffeescript files
coffee: {
files: 'path/to/coffee/**/*.coffee',
tasks: ['refresh:coffee', 'livereload']
},
その後、私は、私は彼らの設定にclean:coffee
とcoffee:refresh
ファイルリストを更新regarde:file
イベントのために聞きます。
フィードregarde:file
イベントに基づいて設定:
grunt.event.on('regarde:file', function (status, target, filepath) {
if (resetFlag) {
// clean file list from previous cycle, so clean clean:coffee and coffee:refresh
// file lists
...
resetFlag = false;
}
if (status === 'deleted') {
if (filepath) {
// calculate filepath's destination and
// add it to clean:coffee filelist
}
} else {
if (!grunt.file.isDir(filepath)) {
// add filepath to coffee:refresh filelist
}
}
}
grunt.config()
機能を経由して設定を更新するのは簡単です。コードスニペットの下には、coffee:refresh
とclean:coffee
があります。設定の追加
coffee:refresh
全設定を追加
var config = grunt.config('coffee') || {};
var value = config.refresh || {};
value.files = value.files || [];
...
var cwd = path.dirname(filepath),
src = path.basename(filepath),
dest = cwd.replace('path/to/source', 'path/to/dest');
value.files.push({
expand:true,
src:src,
dest:dest,
cwd:cwd,
ext:'.js'
});
grunt.config('coffee', config);
clean:coffee
に:
var cwd = path.dirname(filepath),
src = path.basename(filepath),
dest = cwd.replace('path/to/source', 'path/to/dest');
value.src.push(path.join(dest, src.replace('coffee', 'js')));
// clean only what has been removed
config = grunt.config('clean') || {};
config.coffee = value;
grunt.config('clean', config);
タスクrefresh:coffee
がトリガされます:
grunt.registerMultiTask('refresh', 'refreshing the changed file(s)', function() {
this.requires('regarde');
var tasks = [];
var clean = grunt.config('clean');
// check if there is clean:refresh config available
if (clean && clean[this.target]) {
tasks.push('clean:' + this.target);
}
var config = grunt.config(this.target);
// check if there is coffee:refresh config available
if (config && config.refresh) {
tasks.push(this.target + ':refresh');
}
// run the tasks
grunt.task.run(tasks);
// set the resetFlag back to true
resetFlag = true;
});
'src: '<%= grunt.regarde.changed%>''私のために働いた(文字列でラップする必要がある)。 – Adam
ありがとう、私はそれを上に変更しました。 – nackjicholson