使用RequireJS中的相同配置文件在并行目录下优化/构建模块

时间:2012-01-24 04:51:39

标签: javascript requirejs amd

我觉得标题可能不是解释性的:)

设置

假设我有以下结构:

enter image description here

其中app.js个文件是应用程序的主要引导/输入模块,如下所示:

app01

require.config({});

require([
    'app/component1.js'
], 
function(component){
    // do something with component1
});

app02

require.config({});

require([
    'app/component2.js'
], 
function(component){
    // do something with component2
});

,它们都适用于index.html个文件。

我有 app01 的RequireJS构建配置文件(假设与路径相关的正确位置):

({
    appDir: 'apps/app01',
    baseUrl: '.',
    dir: 'built_apps/app01',
    optimize: 'closure',
    paths: {
    },

    modules: [
        {
            name: 'app'
        }
    ]
})

效果很好。类似文件(将app01替换为app02)适用于 app02

问题/目标

现在我希望能够运行RequireJS构建工具(在Ant下使用带有Rhino的Google Closure,而不是在这种情况下真的很重要) app01 app02 使用相同构建配置文件的应用程序,最好不要按名称实际列出所有应用程序(因为数字和名称可能会随时间变化)。

基本上我希望(或者更确切地说是希望)有类似的东西:

({
    appDir: 'apps',
    baseUrl: '.',
    dir: 'built_apps',
    optimize: 'closure',
    paths: {

    },

    modules: [
        {
            name: 'app*/app' // notice the wildcard
        }
    ]
})

会在built_apps目录上运行,找到app * / app下的所有应用并优化其中的每一个。

我知道我可以使用Ant在每个应用程序中动态创建这样的构建配置文件,对它运行构建然后清理,但我宁愿使用RequireJS解决方案。

有没有办法用RequireJS做这样的事情?

1 个答案:

答案 0 :(得分:2)

RequireJS没有内置的通配符配置。不管怎样,你需要代码才能做到这一点。我会观察到你在这里所要求的相当于将通配符翻译成模块对象的某种隐式迭代,类似于mustache.js为其模板提供的内容。国际海事组织,在这种背景下,这是一种相当脆弱和有限的方法。

相反,我建议您在构建配置中以编程方式在JavaScript中生成modules数组。回想一下,构建配置是JavaScript而不仅仅是JSON数据结构。这为您提供了复杂的脚本功能。

我在requirejs-rails gem的构建配置中完成了这种脚本编写。这是example gist,显示了r.js在构建时会看到的内容。