来自外部文件的Grunt服务器任务配置

时间:2015-12-01 14:25:15

标签: javascript angularjs json gruntjs

我正在运行Angular.js应用程序并且所有任务管理都是用grunt制作的,现在我有三个组件,我在实时重新加载,bower_components,发票和用户中观看,最终他们是会增加数量,所以我想知道是否有一种方法来调用像components.json这样的外部文件并迭代它的n个成员。这是我的代码:

// The grunt server settings
connect: {
    options: {
        port: 9000,
        hostname: 'localhost',
        livereload: 35729
    },
    livereload: {
        options: {
            open: true,
            middleware: function (connect) {
                return [
                    connect.static('.tmp'),
                    connect().use(
                        '/bower_components',
                        connect.static('./bower_components')
                    ),
                    connect().use(
                        '/invoices',
                        connect.static(invoicesAppPathConfig.root)
                    ),
                    connect().use(
                        '/users',
                        connect.static(usersAppPathConfig.root)
                    ),
                    connect.static(secureAppPathConfig.app)
                ];
            }
        }
    },
    dist: {
        options: {
            open: true,
            base: '<%= main.dist %>'
        }
    }
}

我已经创建了component.json文件:

{"data":[
    {
        "resource":"/bower_components",
        "config":"./bower_components"
    },
    {
        "resource":"/invoices",
        "config":"invoicesAppPathConfig.root"
    },
    {
        "resource":"/users",
        "config":"usersAppPathConfig.root"
    }
]}

在Gruntfile.js中我创建了这些变量,记住我需要迭代数据内容:

var components = require('./components.json');
var data = components.data;

现在我有了问题,我怎么能在代码中做到这一点?

middleware: function (connect) {
    return [
        connect.static('.tmp'),
        // Here comes the data iteration
        connect.static(secureAppPathConfig.app)
    ];
}

提前致谢。

2 个答案:

答案 0 :(得分:2)

当然可以:

grunt.initConfig({
    components: grunt.file.readJSON('components.json'),
    [...]
});

更多info on grunt.file here

你也可以要求它:

var components = require('./components.json');

答案 1 :(得分:0)

创建下一个变量:

var components = require('./components.json');
var data = components.data;
var arrayComponents = [];

然后在livereload的选项中迭代json数据并将其添加到arrayComponents

middleware: function (connect){
    arrayComponents.push(connect.static('.tmp'));
    // The modules to be watched are added
    for(var i in data){
        arrayComponents.push(connect().use(data[i].resource, connect.static(data[i].config)));
    }
    arrayComponents.push(connect.static(secureAppPathConfig.app));
    return arrayComponents;
}

它有效,但也许它不是最优雅的解决方案。