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

时间:2012-04-19 06:12:06

标签: javascript build requirejs

我一直在争论这个问题(甚至使用了一些基于Ant的解决方法),甚至发布了一个未回复的问题:older similar/related question

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 example build configuration,如下所示:

({
    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'

非常感谢任何帮助,建议(在这两个问题上)。

1 个答案:

答案 0 :(得分:3)

模块列表:config不允许重复名称值。我怀疑这是问题的根源。它是一个数组,只是为了允许在其他构建层中排除的构建层的正确排序 - 使用对象哈希不起作用,因为对象的密钥迭代不保证顺序。

如果你想进行具有非缩小和缩小格式的图层的构建,我建议通过节点脚本驱动构建,然后手动要求uglify并执行构建文件的副本并在之后缩小该副本构建。

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

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