Javascript 访问initConfig()中的Grunt配置数据
如何访问Grunt config属性Javascript 访问initConfig()中的Grunt配置数据,javascript,gruntjs,Javascript,Gruntjs,如何访问Grunt config属性site以读取config属性值指定路径处的project.json文件 grunt.registerTask('build', function(target) { grunt.config('site', target); grunt.task.run('foo:dist', 'bar:dist'); }); grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), site
site
以读取config属性值指定路径处的project.json
文件
grunt.registerTask('build', function(target) {
grunt.config('site', target);
grunt.task.run('foo:dist', 'bar:dist');
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.file.readJSON('./sites/' + grunt.config('site') + '/project.json')
});
grunt cli:
grunt build:sitename
>> Error: Unable to read "./sites/undefined/project.json"
grunt global:site:sitename
>> Error: Unable to read "./sites/undefined/project.json"
使用文档中的一个示例,我还尝试了以下方法:
grunt.registerTask('global', 'site', function(prop, value) {
global[prop] = val;
});
grunt.registerTask('build', ['foo:dist', 'bar:dist']);
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.file.readJSON('./sites/' + global.site + '/project.json')
});
grunt cli:
grunt build:sitename
>> Error: Unable to read "./sites/undefined/project.json"
grunt global:site:sitename
>> Error: Unable to read "./sites/undefined/project.json"
更新: 以@FelixKling的答案为指导,我取得了一些进展:
grunt.registerTask('build', function(target) {
grunt.config.set('target', target);
grunt.config.set('site', grunt.file.readJSON('./sites/' + grunt.config.get('target') + '/project.json'));
grunt.task.run('watch');
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.config.get('site'),
watch: {
sass: {
files: ['<%= site.dev %>/scss/*.scss'],
tasks: ['sass:dist']
}
},
sass: {
dist: {
files: {
'<%= site.dist %>/style.css': '<%= site.dev %>/scss/style.scss'
}
}
},
});
grunt.registerTask('build',函数(目标){
grunt.config.set('target',target);
grunt.config.set('site',grunt.file.readJSON('./sites/'+grunt.config.get('target')+'/project.json'));
grunt.task.run('watch');
});
grunt.initConfig({
pkg:grunt.file.readJSON('package.json'),
site:grunt.config.get('site'),
观察:{
sass:{
文件:['/scss/*.scss'],
任务:['sass:dist']
}
},
sass:{
地区:{
档案:{
“/style.css”:“/scss/style.scss”
}
}
},
});
现在我能够成功地读入project.json
文件,而且(不知何故)它甚至能够识别何时对监视的文件进行了编辑。但由于某种原因,当它运行sass:dist
任务时,我得到了以下错误:警告:处理模板时出错(无法读取未定义的属性“dev”)。
我不清楚
watch
任务如何能够为站点
获取正确的值,但更重要的是,我需要找到一种方法来为sass
任务获取相同的值。initConfig
和grunt.file.readJSON
在任务运行之前运行。似乎您需要的是模板字符串,只有在实际拥有目标名称时才能调用grunt.file.readJSON
例如:
grunt.registerTask('build', function(target) {
grunt.config.set('target', target);
grunt.config.set('site', grunt.file.readJSON(grunt.config.get('path'));
grunt.task.run('foo:dist', 'bar:dist');
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
path: './sites/<%= target %>/project.json'
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
sass: {
files: ['<%= site.dev %>/scss/*.scss'],
tasks: ['sass:dist']
}
}
});
grunt.config.set('site', grunt.file.readJSON('./sites/' + grunt.option('site') + '/project.json'));
让我们单独看看grunt.initConfig
:
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
site: grunt.config.get('site'),
});
这是初始化步骤,它发生在其他步骤之前。首先计算传递给配置对象initConfig
的参数。您在这里尝试的是在创建配置之前访问配置选项站点
。我希望你认识到这没有道理
在注册任何任务之前,如果将grunt.initConfig
放在最上面,可能会帮助您理解流程
解决方案:
grunt build:sitename
>> Error: Unable to read "./sites/undefined/project.json"
grunt global:site:sitename
>> Error: Unable to read "./sites/undefined/project.json"
我认为您实际需要的可能是命令行参数,您可以使用这些参数控制要构建的站点。有关更多信息,请参阅
例如:
grunt.registerTask('build', function(target) {
grunt.config.set('target', target);
grunt.config.set('site', grunt.file.readJSON(grunt.config.get('path'));
grunt.task.run('foo:dist', 'bar:dist');
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
path: './sites/<%= target %>/project.json'
});
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
sass: {
files: ['<%= site.dev %>/scss/*.scss'],
tasks: ['sass:dist']
}
}
});
grunt.config.set('site', grunt.file.readJSON('./sites/' + grunt.option('site') + '/project.json'));
initConfig中的内联grunt.file.readJSON()肯定会在registerTask之前执行。@Rajit:Oops,忘了删除该部分。谢谢如图所示运行代码时,出现以下错误:
无法读取“/sites//project.json”
。在读取文件路径时,让Grunt插入变量有什么诀窍吗?@cantera:请查看我的更新<代码>监视工作,因为您在运行监视
之前正确设置了配置。build
所做的就是设置配置选项并运行taskwatch
。这很有效!非常感谢您详细解释并引导我了解解决方案。关于您的更新,目前grunt.file.readJSON('./sites/'+global.site+'/project.json')
运行,global.site
任务尚未运行,因此还不存在global
任务。再次检查我的答案,我纠正了错误。