在grunt中声明多个文件

时间:2015-01-30 16:05:09

标签: javascript gruntjs

我是Grunt的新手所以也许这是一个简单的问题,但我真的很茫然......

我想在" 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']);
};

我说源文件是空的。但是,如果我只声明一个文件就可以了。

如果我直接在&#34; grunt.js&#34;工程...

// 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']);
};

有人可以告诉我如何使第一个工作吗?

谢谢:)

1 个答案:

答案 0 :(得分:0)

问题是,通过将pkg.config.files.css粘贴到模板中,它可能会对其进行字符串化。尝试直接传递变量:

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

// Right
pkg.config.files.css

这样,Grunt就会按照您的预期传入数组。

编辑:

如果这不起作用,here's an alternative way to access package.json.虽然以上是有效的JS,但它可能对Grunt无效,因为如果grunt.file.readJSON异步运行,它将是undefined直到它完成了,这将是在grunt已经初始化配置对象之后。因此,grunt返回并在数据可用时插入数据。