2015-01-30 4 views
1

Я новичок хрюкать так может быть, это простой вопрос, но я действительно в растерянности с этим ...Объявите несколько файлов в хрюкать

Я завязывание объявить все мои файлы в " package.json "и внутри grunt просто импортировать их. Что-то вроде этого:

// package.json 
{ 
    "config": { 
     "files": { 
      "css": ["../assets/css/main.scss", "../assets/css/plugins.scss"] 
     } 
    }, 
    "dependencies": { 
     "grunt": "~0.4.5", 
     "grunt-contrib-sass": "~0.8.1" 
    } 
} 
// grunt.js 
module.exports = function (grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     sass: { 
      dev: { 
       options: { style: 'compressed', noCache: true }, 
       files: { '../assets/min/min.css': '<%= pkg.config.files.css %>' } 
      } 
     } 
    }); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
    grunt.registerTask('default', ['sass:dev']); 
}; 

Я говорю, что исходные файлы пусты. Но если я объявляю только один файл, он работает отлично.

Хотя, если я объявляю их непосредственно внутри «grunt.js» работает ...

// grunt.js 
module.exports = function (grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     sass: { 
      dev: { 
       options: { style: 'compressed', noCache: true }, 
       files: { '../assets/min/min.css': ["../assets/css/main.scss", "../assets/css/plugins.scss"] } 
      } 
     } 
    }); 
    grunt.loadNpmTasks('grunt-contrib-sass'); 
    grunt.registerTask('default', ['sass:dev']); 
}; 

Может кто-нибудь сказать мне, как сделать первый одну работу?

Спасибо :)

+0

Возможно, я ошибаюсь, но я не думаю, что вы можете хранить свои собственные свойства в package.json. Это просто файл конфигурации, используемый узлом для управления зависимостями. Почему бы просто не хранить файлы в отдельном объекте в верхней части вашего файла grunt? –

+0

Я тоже пробовал это, и он работает, если я делаю это «css_files: ['main.scss', 'plugins.scss'],« но я хочу сделать небольшую функцию для конкатенации путей к именам файлов примерно так » css_files: function() {return ['main.scss', 'plugins.scss'];}, " – Kup

+0

Я не вижу ничего плохого в файле JSON. Это действительно справедливый объект JS без методов, поэтому он знает, как обрабатывать строки, массивы и т. Д. – EmptyArsenal

ответ

0

Проблема заключается в том, что путем наклеивания pkg.config.files.css в шаблон, это, вероятно, stringifying его. Попробуйте просто проездом в переменную непосредственно:

// Wrong 
'<%= pkg.config.files.css %>' 

// Right 
pkg.config.files.css 

Таким образом, Grunt будет просто передать в массив, как вы ожидаете его.

EDIT:

Если это не работает, here's an alternative way to access package.json. Хотя выше справедливо JS, он не может быть действительным с Грантом, потому что если grunt.file.readJSON работает асинхронно, то это будет undefined, пока не закончится, что будет после того, как grunt уже инициализировал объект конфигурации. Таким образом, grunt возвращается и вставляет данные, когда они доступны.

+0

Если я это делаю, то grunt sais pkg не определено – Kup

+0

Запускаете ли вы задачу Grunt из того же каталога, что и 'package.json'? – EmptyArsenal

+0

Да, оба они в корне/grunt/ – Kup

Смежные вопросы