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

Javascript 来自外部文件的Grunt服务器任务配置,javascript,angularjs,json,gruntjs,Javascript,Angularjs,Json,Gruntjs,我正在运行Angular.js应用程序,所有的任务管理都是用grunt完成的,因为现在我在实时重新加载中看到了三个组件:bower_组件、发票和用户,最终它们的数量会增加,因此,我想知道是否有一种方法可以调用components.json之类的外部文件并遍历其n个成员。这是我的密码: // The grunt server settings connect: { options: { port: 9000, hostname: 'localhost',

我正在运行Angular.js应用程序,所有的任务管理都是用grunt完成的,因为现在我在实时重新加载中看到了三个组件:bower_组件、发票和用户,最终它们的数量会增加,因此,我想知道是否有一种方法可以调用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 %>'
        }
    }
}
在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)
    ];
}
提前感谢。

当然可以:

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

您也可以要求:

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

创建下一个变量:

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;
}

它可以工作,但可能不是最优雅的解决方案。

那么您具体需要什么呢?只需像在grunt文件中一样需要它即可
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;
}