如何使用Grunt将多个JSON文件加载到Jade模板中?

时间:2014-01-09 13:09:25

标签: javascript json templates gruntjs pug

我可以使用Grunt成功加载一个JSON文件作为我的Jade模板的数据源,类似于this solution

现在我需要从项目中的不同文件夹中加载一组JSON文件,以便可以从Jade模板访问它们的所有数据。如何在Grunt任务的背景下更好地做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用此方法加载任意数量的json文件:

    // Jade => HTML
gruntConfig.jade = {
    compile: {
        options: {
            data: {
                object: grunt.file.readJSON('JSON_FILE.json'),
                object1: grunt.file.readJSON('JSON_FILE_1.json'),
                object2: grunt.file.readJSON('JSON_FILE_2.json'),

            }
        },
    }
};

然后在Jade模板中,您只需要引用该对象。 IE:

    script(src= object.baseURL + "js/vendor/jquery.js")
    script(src= object.baseURL + "js/vendor/elementQuery.js")
    script(data-main="js/main", src= object.baseURL + "js/vendor/require.js")

我知道这回答得有点迟了但是对于任何从谷歌搜索中遇到此问题的人来说,这就是使用Grunt.js将多个JSON文件加载到Jade模板中的答案。

答案 1 :(得分:1)

在将对象提供给Jade之前,您需要将它们组合在一起。为此,我建议使用Underscore.js。

就个人而言,我会编写一个从文件中获取数据的方法,如下所示:

module.exports = function(grunt) {

    function combineJSONFiles() {
        var object = {};

        for(var i=0; i<arguments.length; ++i) {
            _(object).extend(grunt.file.readJSON(arguments[i]));
        }

        return object;
    }

    grunt.loadNpmTasks('grunt-contrib-jade');

    grunt.initConfig(
    {
        jade: {
            html: {
                src: './*.jade',
                dest: './index2.html',
                options: {
                    client: false,
                    pretty: true,
                    data: combineJSONFiles(
                        "1.json",
                        "2.json",
                        "3.json"
                    )
                }
            }
        }
    });

    grunt.registerTask('default', 'jade');
};

希望有所帮助!