我正在设置一系列与RequireJS r.js编译器一起使用的grunt任务:
1)生成目录中所有文件的.json文件列表
2)从文件名中删除“.js”(requirejs需要这个)
3)使用grunt.file.read
JSON()来解析该文件,并在我的requirejs编译任务中用作配置选项.
这是我的gruntfile.js中的相关代码:
module.exports = function (grunt) {
grunt.initConfig({
// create automatic list of all js code modules for requirejs to build
fileslist: {
modules: {
dest: 'content/js/auto-modules.json',
includes: ['**/*.js', '!app.js', '!libs/*'],
base: 'content/js',
itemTemplate: '\t{' +
'\n\t\t"name": "<%= File %>",' +
'\n\t\t"exclude": ["main"]' +
'\n\t}',
itemSeparator: ',\n',
listTemplate: '[' +
'\n\t<%= items %>\n' +
'\n]'
}
},
// remove .js from filenames in module list
replace: {
nodotjs: {
src: ['content/js/auto-modules.json'],
overwrite: true,
replacements: [
{ from: ".js", to: "" }
]
}
},
// do the requirejs bundling & minification
requirejs: {
compile: {
options: {
appDir: 'content/js',
baseUrl: '.',
mainConfigFile: 'content/js/app.js',
dir: 'content/js-build',
modules: grunt.file.readJSON('content/js/auto-modules.json'),
paths: {
jquery: "empty:",
modernizr: "empty:"
},
generateSourceMaps: true,
optimize: "uglify2",
preserveLicenseComments: false,
//findNestedDependencies: true,
wrapShim: true
}
}
}
});
grunt.loadNpmTasks('grunt-fileslist');
grunt.loadNpmTasks('grunt-text-replace');
grunt.loadNpmTasks('grunt-contrib-requirejs');
grunt.registerTask('default', ['fileslist','replace', 'requirejs']);
我遇到了一个问题,如果在我的配置文件加载时“content / js / auto-modules.json”文件尚未存在,则在文件存在之前立即执行file.readJSON()整个任务失败并抛出“错误:无法读取文件”如果文件已经存在,一切都很好.
如何进行此设置,以便任务配置等待在第一个任务中创建该文件,并在尝试加载&之前在第二个任务中进行修改.为其中的第三个任务解析JSON?或者是否有另一种方式(可能使用不同的插件)在一个任务中生成一个json对象,然后将该对象传递给另一个任务?
最佳答案 老帖但我有类似的经历.
我试图加载一些json配置,如:
conf: grunt.file.readJSON('conf.json'),
但是如果这个文件不存在那么它会落入堆中而不会做任何事情.
所以我做了以下加载它并填充默认值,如果它不存在:
grunt.registerTask('checkConf', 'ensure conf.json is present', function(){
var conf = {};
try{
conf = grunt.file.readJSON('./conf.json');
} catch (e){
conf.foo = "";
conf.bar = "";
grunt.file.write("./conf.json", JSON.stringify(conf) );
}
grunt.config.set('conf', conf);
});
您仍然可能有一些时间问题,但这种方法可能会帮助有readJSON错误的人.