2

我有一种感觉,标题可能无法解释:)

设置

假设我有以下结构:

在此处输入图像描述

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

应用01

require.config({});

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

应用02

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

效果很好。类似的文件(替换app01app02)适用于app02

问题/目标

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

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

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

    },

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

它将运行built_apps目录,找到 app*/app 下的所有应用程序并优化它们中的每一个。

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

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

4

1 回答 1

2

RequireJS 没有内置的通配符配置。无论哪种方式,您都需要代码来执行此操作。我会注意到您在这里要求的内容相当于将通配符转换为模块对象上的某种隐式迭代,类似于mustache.js为其模板提供的内容。IMO,在这种情况下,这是一种相当脆弱和有限的方法。

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

我已经在requirejs-rails gem的构建配置中完成了这种脚本。这是一个示例要点,显示了r.js在构建时会看到什么。

于 2012-04-20T22:33:18.520 回答