Как мне получить доступ к свойству конфигурации Grunt site
для чтения файла 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 build: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 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'
}
}
},
});
Теперь я могу прочитать файл project.json
успешно, и (каким-то образом) он даже способен распознавать, когда редактируются файлы наблюдения. Но по какой-то причине, когда он запускает задачу sass:dist
, я получаю эту ошибку: Warning: An error occurred while processing a template (Cannot read property 'dev' of undefined).
Я не понимаю, как задача watch
может получить правильное значение для site
, но что более важно, мне нужно выяснить способ получения того же значения для задачи sass
.