RequireJs 在使用上下文时忽略配置
RequireJs Ignoring Config When Context Is Used
这是我的页面的样子
<script>
// set the configuration for require.js syncronously
var require = {
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
};
</script>
<script src='/scripts/libs/require.js'></script>
<script>
// this throws an error because it tries to load module1.js from the current relative path instead of /scripts/module1.js
require(['module1'],function(module1){
module1.test();
});
</script>
我在 Whosebug 上回顾了几个类似的问题,比如这个答案:Require JS is ignoring my config
和此处的文档:https://github.com/requirejs/requirejs/wiki/Patterns-for-separating-config-from-the-main-module
如果我理解正确,通过在包含 require 脚本之前同步声明 require,设置应该在加载 module1 时可用,但它似乎不起作用。
我最初以这种方式尝试过,结果相同:
<script src='/scripts/libs/require.js'></script>
<script>
require.config({
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
});
</script>
编辑:显然,当我删除上下文行时它可以正常工作。我不知道为什么会破坏它。
问题是您在与您在配置中使用的上下文不同的上下文中发出 require
调用。如果您未指定上下文,则其默认名称为 _
(而非 default
)。使用您显示的代码,配置中的上下文是 default
。但是您使用 RequireJS 提供的默认 require
调用,它在名为 _
.
的上下文中运行
当您指定不同于默认值的上下文名称时,您希望保存来自 require.config
调用的 return 值,并使用该值而不是默认值 require
:
var myReq = require.config({
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
});
myReq(['module1'],function(module1){
module1.test();
});
有关如何使用 context
的文档,请参阅 here。
如果您实际上不需要使用上下文,那么最简单的解决方案就是从您的配置中删除 context: 'default'
。
这是我的页面的样子
<script>
// set the configuration for require.js syncronously
var require = {
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
};
</script>
<script src='/scripts/libs/require.js'></script>
<script>
// this throws an error because it tries to load module1.js from the current relative path instead of /scripts/module1.js
require(['module1'],function(module1){
module1.test();
});
</script>
我在 Whosebug 上回顾了几个类似的问题,比如这个答案:Require JS is ignoring my config
和此处的文档:https://github.com/requirejs/requirejs/wiki/Patterns-for-separating-config-from-the-main-module
如果我理解正确,通过在包含 require 脚本之前同步声明 require,设置应该在加载 module1 时可用,但它似乎不起作用。
我最初以这种方式尝试过,结果相同:
<script src='/scripts/libs/require.js'></script>
<script>
require.config({
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
});
</script>
编辑:显然,当我删除上下文行时它可以正常工作。我不知道为什么会破坏它。
问题是您在与您在配置中使用的上下文不同的上下文中发出 require
调用。如果您未指定上下文,则其默认名称为 _
(而非 default
)。使用您显示的代码,配置中的上下文是 default
。但是您使用 RequireJS 提供的默认 require
调用,它在名为 _
.
当您指定不同于默认值的上下文名称时,您希望保存来自 require.config
调用的 return 值,并使用该值而不是默认值 require
:
var myReq = require.config({
context: 'default',
baseUrl: '/scripts',
bundles: {
'bundles/main': ['utils']
}
});
myReq(['module1'],function(module1){
module1.test();
});
有关如何使用 context
的文档,请参阅 here。
如果您实际上不需要使用上下文,那么最简单的解决方案就是从您的配置中删除 context: 'default'
。