我是一个gruntjs新手,我正在尝试为JS前端编写一个版本。设置了一个需求,以便必须在外部文件中定义进入构建过程(连接,缩小)的所有源文件:
|-config
|- js.json
|-src
|- js
|- a.js
|- b.js
|- Gruntfile.js
|- package.json
我简化了项目结构来说明问题。 config/js.json
看起来像这样:
[
"<%=js_dir%>/a.js",
"<%=js_dir%>/b.js"
]
Gruntfile.js
看起来像这样:
module.exports = function(grunt) {
grunt.initConfig({
concat: {
"options": {"separator": ";"},
"build": {
"src": "<%= grunt.template.process(grunt.file.read('./config/js.json'),{data: {js_dir: './src/js'}})%>"
,
"dest": "build/app.js"
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('default', ['concat']);
};
当我运行它时,会生成一个空输出文件,因为源列表为空:
...
Reading ./config/js.json...OK
Files: [no src] -> build/app.js
Reading ./config/js.json...OK
Writing out...OK
Writing build/app.js...OK
File "build/app.js" created.
Done, without errors.
要验证我的逻辑,我通过更改src
属性来转储已处理的源列表:
"src": "<%= grunt.file.write('out',grunt.template.process(grunt.file.read('./config/js.json'),{data: {js_dir: './src/js'}}))%>"
out
文件的内容显示模板处理逻辑有效:
[
".src/js/a.js",
".src/js/b.js"
]
由于src
属性accepts a hardcoded JSON array of source files,我猜测源列表的绑定是在模板完成之前完成的。
gruntjs详细输出显示在连接之前和之后读取config/js.json
,这让我感到困惑。
我尝试重写config/js.json
文件,以便所有JSON数组都适合一行,但无济于事。
如果可以这样做,请告诉我如何做。如果无法完成,请告诉我原因。
我的环境:
答案 0 :(得分:4)
Grunt配置将在读取配置时处理模板。所以你不需要额外的grunt.template.process
。假设config/js.json
是有效的JSON,请执行以下操作:
module.exports = function(grunt) {
grunt.initConfig({
js_dir: 'src/js',
concat: {
options: {separator: ";"},
build: {
src: require('./config/js.json'),
dest: "build/app.js"
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.registerTask('default', ['concat']);
};
永远记住Gruntfiles是JavaScript而不是JSON。