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

标签 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 工作正常。

问题/目标

现在我希望能够为 app01app02 使用相同构建配置文件的应用程序并且最好不要按名称实际列出所有应用程序(因为数量和名称可能会随时间变化)。

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

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

    },

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

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

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

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

最佳答案

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

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

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

关于javascript - 在 RequireJS 中使用相同的配置文件在并行目录下优化/构建模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8982133/

相关文章:

javascript - 使用 requirejs 创建具有多个模块的单页应用程序

javascript - 如何使用 RequireJS 加载 KnockoutJS 自定义函数?

backbone.js - Backbone 、RequireJS 和树

dojo - 配置dojo加载器路径

requirejs - 在 noConflict 模式下使用 jQuery 在 require.js 中加载非 AMD 兼容的 jQuery 插件的正确方法?

javascript - 谷歌图表设置网格线颜色

PHP 标签后 JavaScript 停止工作

javascript - 未捕获的语法错误 : Illegal return statement in recursive function

javascript - 如何将对象数组转换为 Lodash 中的对象?

requirejs - 通过 requirejs 加载 slickgrid