[英]Use Grunt newer with custom task
我正在尝试使用grunt-newer来查看文件夹中的文件,如果有任何更改,则触发自定义任务。
我的Gruntfile.js中有类似的东西:
grunt.initConfig({
watch: {
widgets: {
files: "/somepath/*.js",
tasks: ['newer:mycustomtask']
}
}
});
grunt.registerTask("mycustomtask", ["description of my task"], function() {
console.log("me has been triggered");
});
每当我运行“grunt watch”时,我都会输出:
Running "watch" task
Waiting...
File "/somepath/WidgetA.js" changed.
Running "newer:mycustomtask" (newer) task
Fatal error: The "newer" prefix is not supported for aliases
我用Google搜索但没有发现任何相关信息。 任何人都知道我怎么能实现这个? 我现在需要在我的“customtask”中更改了哪些文件
如果您引用未安装或未配置的任务(内部监视或并发),则会收到此错误输出。
当您从其他项目复制粘贴监视配置时,通常会发生这种情况。
我遇到了类似的要求,我最终得到的解决方案大致如下。 我们假设项目结构是:
Gruntfile.js
package.json
src/
config.js
data.js
tasks/
customtask.js
这里, src
目录包含将由watch
监视的数据,而自定义任务的定义存储在tasks/customtask.js
。 出于此示例的目的,此任务仅打印已更改文件的文件名:
var fs = require('fs');
var path = require('path');
module.exports = function(grunt) {
grunt.registerMultiTask('customtask', function() {
var done = this.async();
if(!this.files){ done(); return; }
this.files[0].src.forEach(file_name => {
console.log(file_name);
});
done();
});
};
现在, Gruntfile.js
看起来像:
module.exports = function(grunt) {
const files = ['src/config.js', 'src/data.js'];
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
customtask: {
release: {
src: files
}
},
watch: {
data: {
files: files,
tasks: ['customtask:release']
},
options: {
spawn: false
}
}
});
grunt.loadTasks('tasks');
grunt.loadNpmTasks('grunt-contrib-watch');
var changedFiles = Object.create(null);
var onChange = grunt.util._.debounce(function() {
grunt.config('customtask.release.src', Object.keys(changedFiles));
changedFiles = Object.create(null);
}, 200);
grunt.event.on('watch', function(action, filepath) {
changedFiles[filepath] = action;
onChange();
});
grunt.registerTask('build', ['watch:data']);
};
在这里,它指定:
['src/config.js', 'src/data.js']
customtask
原则上对这些文件进行操作(如果它将被直接调用) watch
应该观察这些文件并启动customtask:release
只要有变化就会customtask:release
grunt.loadTasks('tasks')
加载所有从目录“任务定义” tasks
,即,这里只customtask
grunt.registerTask('build', ['watch:data'])
定义了watch:data
的“快捷方式” watch:data
最后,为了仅为已更改的文件调用customtask
,此示例使用“根据需要编译文件”一节中的文档中使用的策略。 在松散的术语,它装配在一个对象然后的键被用来修改所有改变的文件src
所述的属性customtask
上即时。
运行grunt build
然后启动“watch”。 如果在另一个终端窗口中运行,例如touch src/*.js
,则输出为:
Running "watch:data" (watch) task
Waiting...
>> File "src/config.js" changed.
>> File "src/data.js" changed.
Running "customtask:release" (customtask) task
src/config.js
src/data.js
最后两行来自customtask
...
您只需要为您的任务配置一个配置条目(即使是空条目):
grunt.initConfig({
mycustomtask: {
},
watch: {
widgets: {
files: "/somepath/*.js",
tasks: ['newer:mycustomtask']
}
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.