以下代码读取js
内每个子目录app/modules/
的内容(例如app / modules / module1 / js /,app / modules / module2 / js /,aso。)
此脚本在不使用最后一个命令grunt.task.run('concat:' + dir);
之前工作。
一段时间它现在停止工作,所以我不得不在forEach循环内添加对任务concat的调用。
通常我会在concat配置中保存新配置,稍后调用生成的concat任务。
grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() {
// read all subdirectories from your modules folder
grunt.file.expand('./app/modules/*').forEach(function(dir){
// get the current concat config
var concat = grunt.config.get('concat') || {};
// set the config for this modulename-directory
concat[dir] = {
src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'],
dest: dir + '/js/compiled.js'
};
// save the new concat config
grunt.config.set('concat', concat);
grunt.task.run('concat:' + dir); // this line is new
});
});
在最近的版本中,我必须添加一个明确的task.run行?
并且有没有办法将此任务的设置写入现有concat任务的设置中,这样如果我对该配置有其他手动添加,那么对于扫描的每个目录都不会运行这些操作?
感谢您的帮助。
答案 0 :(得分:2)
grunt.task.run();
尽管它的名字,但不会运行任务。 Grunt始终是同步的,因此grunt.task.run()
将排队任务在当前任务完成后运行。
所以我会避免在数组中使用grunt.task.run()
,而是建立一个后续运行的任务/目标列表:
grunt.registerTask('preparemodulejs', 'iterates over all module directories and compiles modules js files', function() {
var tasks = [];
// read all subdirectories from your modules folder
grunt.file.expand('./app/modules/*').forEach(function(dir){
// get the current concat config
var concat = grunt.config.get('concat') || {};
// set the config for this modulename-directory
concat[dir] = {
src: [dir + '/js/*.js', '!' + dir + '/js/compiled.js'],
dest: dir + '/js/compiled.js'
};
// save the new concat config
grunt.config.set('concat', concat);
tasks.push('concat:' + dir);
});
// queues the tasks and run when this current task is done
grunt.task.run(tasks);
});
答案 1 :(得分:1)
我们还可以直接在这里提供配置,以便为具有多个模块的大型项目随时运行不同的任务。即使我们需要处理根目录之外的文件:
grunt.registerTask('publishapp', 'uglify ivapp.js and upload to server', function (){
var tasks = [];
grunt.file.expand('../outerdirectory/').forEach(function(dir) {
// config for uglify that needs to execute before uploading on server
var uglify = {
options: {
compress: {
drop_console: true,
},
banner: '/* Banner you want to put above js minified code. */\n'
},
all: {
files: [{
expand: true,
cwd: '../',
src: ['somedir/some.js'],
dest: 'build',
ext: '.js',
extDot: 'last'
}]
}
};
// set grunt config : uglify
grunt.config.set('uglify', uglify);
});
// prepare a tasks list
tasks.push('uglify:all');
tasks.push('exec:publish');
// execute a tasks to perform
grunt.task.run(tasks);
});