如何使用 RequireJS 构建多个模块,使用一个带有覆盖的物理配置文件

How to build several modules using RequireJS using one physical configuration file with overrides

本文关键字:一个 覆盖 配置文件 构建 RequireJS 何使用 模块      更新时间:2023-09-26

我已经为此斗争了一段时间(甚至使用了一些基于 Ant 的解决方法),甚至发布了一个未得到解答的问题:较早的类似/相关问题。

Require.js 允许使用相同的配置文件/配置文件构建多个模块。例如:

({
    appDir: 'some/path',
    baseUrl: 'some/base/path',
    dir: 'some/other/path',
    optimize: 'none',
    paths: {
        ...
    },
    modules: [
    {
        name: 'someModule',
    },
    {
        name: 'someOtherModule'
    }]
})

效果相当好。此外,Require.js 提供了一个选项来覆盖特定模块的构建的任何选项:Require/js 示例构建配置,如下所示:

({
    appDir: 'some/path',
    baseUrl: 'some/base/path',
    dir: 'some/other/path',
    optimize: 'none',
    paths: {
        ...
    },
    modules: [
    {
        name: 'someModule',
    },
    {
        name: 'someModule',
        override : {
            optimize: 'uglify'
        }
    }]
})

或者说我明白了。目的是在同一应用程序上使用相同的构建配置文件,但同时具有非缩小和缩小。这行不通。

编辑我得到的错误是(已清理,因为它是更大的 Ant 构建的一部分):

Error: ENOENT, no such file or directory 'some/other/path/someModule.js-temp'

任何帮助,建议(关于这两个问题)将不胜感激。

模块列表:config 不允许名称值重复。我怀疑这是问题的根源。它是一个数组,只是为了允许对可能被排除在其他构建层中的构建层进行适当的排序——使用对象哈希是行不通的,因为对对象的键迭代不能保证顺序。

如果你想做一个层为非缩小和缩小格式的构建,我建议通过节点脚本驱动构建,然后手动要求 uglify 并复制构建文件并在构建后缩小该副本。

下面是驱动生成的节点脚本示例:https://github.com/jrburke/r.js/blob/master/build/tests/tools/override/override.js

那个正在替换使用的 uglify 版本,但您可以使用它在传递给 requirejs.optimize() 的回调函数中进行文件复制/手动缩小。