问题:在Grunt项目的“配置任务”页面上,“文件对象格式”指定任务的文件工作方式,而“文件阵列格式”,以及关键的“动态构建文件对象的方式(参见其列表中的“dynamic_mappings”部分)没有。
问题:为什么列表#2不起作用?是Grunt页面上的动态文件构建示例错了吗?
参考: Configuring Tasks / Building the Files Object Dynamically 的Grunt项目页面。
底部是Gruntfile.js的两个列表。第一个不起作用,而第二个起作用。它们之间的唯一区别在于每个如何指定“文件”任务:
files: [{
expand: true,
cwd: 'views/',
src: ['**/*.jade'],
dest: 'html/',
ext: 'html',
}],
......有效的那个:
files: {
expand: true,
cwd: 'views/',
src: ['**/*.jade'],
dest: 'html/',
ext: 'html',
},
唯一的区别在于是否存在“[”和“]”。
第二个列表不起作用,但是遵循Grunt项目页面 Configuring Tasks / Building the Files Object Dynamically 的示例。
列表#1(不起作用): 中止“警告:对象#没有方法'indexOf'使用--force继续。”
module.exports = function(grunt) {
grunt.initConfig({
jade: {
options: { pretty: true,
data: {
debug: true,
timestamp: "<%= grunt.template.today() %>"
}
},
files: [{
expand: true,
cwd: 'views/',
src: ['**/*.jade'],
dest: 'html/',
ext: 'html',
}],
},
watch: {
html: {
files: ['handlers/**/*.js', 'views/**/*.jade', 'app.js'],
tasks: ['jade']
}
}
});
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ['jade', 'watch']);
}
列表#2(有效):
module.exports = function(grunt) {
grunt.initConfig({
jade: {
options: { pretty: true,
data: {
debug: true,
timestamp: "<%= grunt.template.today() %>"
}
},
files: {
expand: true,
cwd: 'views/',
src: ['**/*.jade'],
dest: 'html/',
ext: 'html',
},
},
watch: {
html: {
files: ['handlers/**/*.js', 'views/**/*.jade', 'app.js'],
tasks: ['jade']
}
}
});
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ['jade', 'watch']);
}
答案 0 :(得分:4)
回答(在我发布问题后添加):
CONFIG(grunt.initConfig)所需的结构是:
CONFIG
TASK
TARGET
FILES // MUST be child of a target
OPTIONS // MUST be child of a target
所以这不应该起作用(但是......我很幸运*):
grunt.initConfig
jade: {
files: {... // all info content required for jade...
options: ... // is specified in these two elements
......这应该不起作用(并且......不......哇!):
grunt.initConfig
jade: {
files: [ {...
options: ...
最后,这应该并且确实有效(哈利路亚):
grunt.initConfig
jade: {
foo: { // MUST have target, though no addn'l info added. why? just because.
files: ...
options: ...
答案 1 :(得分:1)
我遇到了类似的问题,并在此帖子中找到了答案(在重新排列此处发布的结构后)
Referring to Grunt targets resulting in Warning: Object true has no method 'indexOf'
基本上,答案是将files指令的定义部分包装为数组。 而不是
files:{...}
使用
files:[{...}]