访问RequireJS路径配置

8

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

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

然后您可以从模块中访问它:

define(['module'], function (module) {        
    var color = module.config().color; // 'blue'
});

但是是否也有一种方法可以访问顶级路径配置,类似这样的方式?
define(['module', 'require'], function (module, require) {        
    console.log( module.paths() ); // no method paths()
    console.log( require.paths() ); // no method paths()
});

提醒您,这不是用于生产环境的。我正在尝试在QUnit测试页面中连接一些奇怪的调试/配置代码。我想枚举哪些模块名称有自定义路径定义。这个问题提到了这个问题,但只允许我查询已知的模块,而不能枚举它们。

2个回答

20

它是可用的,但这只是一些实现细节,在生产代码中不应依赖它(你已经说过这不是为了生产代码,但也要提醒其他人!)

主上下文的配置可在 require.s.contexts._.config 中找到。其他配置也将挂在该contexts 属性下,具体取决于您与其关联的名称。


好的回答,但是有个问题。为什么不在生产代码中使用这个? - Shanimal
2
@Shanimal 因为这个对象将来可能会发生变化(因为它不是直接暴露或在文档中提供),你不希望突然破坏你的生产代码。 - Vishwanath

5

我不认为require在任何地方都会暴露它,至少我在查看庞大的代码库时找不到它。但是你可以通过两种方式来实现这一点。第一种和最明显的方法是将配置定义为全局变量。第二种是创建一个要求插件,覆盖load函数以将配置附加到模块中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接