访问RequireJS路径配置

exp*_*nit 8 javascript qunit requirejs

我在文档中注意到有一种方法可以将自定义配置传递到模块中:

requirejs.config({
    baseUrl: './js',
    paths: {
        jquery: 'libs/jquery-1.9.1',
        jqueryui: 'libs/jquery-ui-1.9.2'
    },
    config: {
        'baz': {
            color: 'blue'
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

然后您可以从模块访问:

define(['module'], function (module) {        
    var color = module.config().color; // 'blue'
});
Run Code Online (Sandbox Code Playgroud)

但是还有一种方法可以访问顶级路径配置,就像这样吗?

define(['module', 'require'], function (module, require) {        
    console.log( module.paths() ); // no method paths()
    console.log( require.paths() ); // no method paths()
});
Run Code Online (Sandbox Code Playgroud)

仅供参考,这不适用于生产现场.我正在尝试在QUnit测试页面中连接一些奇怪的调试/配置代码.我想枚举哪些模块名称定义了自定义路径.这个问题触及了这个问题,但只让我查询已知的模块,而不是枚举它们.

dhe*_*man 20

它是可用的,但它是一个实现细节,不应该依赖于生产代码(您已经说过它不适用于此,但是对其他人的公平警告!)

主要上下文的配置可在以下位置获得require.s.contexts._.config.其他配置也将挂起该contexts属性,其中包含与之关联的任何名称.

  • @Sanimal 因为将来这个对象可能会发生变化(因为它没有直接公开或在文档中可用)并且您不想突然破坏您的生产代码。 (2认同)

Rya*_*nch 5

我不相信要求暴露在任何地方,至少我找不到它通过巨大的代码库.有两种方法可以实现这一点.第一个也是最明显的是将配置定义为全局变量.第二个,更接近你想要的是创建一个require插件来覆盖load函数以将配置附加到模块:

define({
    load: function (name, req, onload, config) {
        req([name], function (value) {
            value.requireConfig = config;
            onload(value);
        });
    }
});
Run Code Online (Sandbox Code Playgroud)