gpt4 book ai didi

javascript - requirejs - 在不同文件中加载具有不同名称的相同模块

转载 作者:行者123 更新时间:2023-11-30 10:33:36 27 4
gpt4 key购买 nike

使用 requirejs,我有两个文件依赖于同一个模块。我必须确保在两个依赖项中始终使用相同的模块名称吗?例如,如果我为 require.config 定义了一个路径:

'myMod':'src/js/myModule'

然后一次使用名称,一次使用实际路径,如下所示:

//in a.js
define(function(require){
var mod = require('myMod');
});

//in b.js
define(function(require){
var mod = require('src/js/myModule');
});

显然,最好的做法是在任何地方都使用模块名称,但我想知道为什么这会导致实际错误。

requirejs 是否存储了使用的模块名称和实际加载的模块之间的映射?

最佳答案

正如你自己所说:

Obviously, the best practice would be to use the module name everywhere

RequireJS 在一定程度上强制执行这种做法。问题是,当您在 paths 中告诉 RequireJS 'myMod':'src/js/myModule' 时,您实际上是在说要加载 src/js/myModule 在名称 myMod 下。很可能,如果您随后通过完整路径引用它,这就是您的错误。如果这发生在我的代码中,我会认为这是一个错误。所以我希望 RequireJS 在发生这种情况时失败。

还有语义问题。基本情况是,如果传递给 require 的两个名称不同,一旦解析了相对路径,它们就指向两个不同的模块。按照这个思路,如果您执行 require('myMod')require('src/js/myModule'),您会期待两个不同模块。如果您执行 require('myMod')require('myMod'),您将获得相同模块。那么对于您设置的路径,您真正想要的是什么? 相同模块还是不同模块?

RequireJS 有办法让你两者兼得。如果您希望两个模块名称都为您提供相同的模块,那么您可以删除您的 paths 配置并改用 map 配置:

map: {
'*': {
myMod: 'src/js/myModule'
}
}

这意味着“在所有模块(*)中,如果对模块myMod发出请求,则加载模块src/js/myModule 代替。”意图非常明确。

如果您希望两条路径都为您提供不同的模块尽管它们共享相同的源,您可以使用 RequireJS 插件来实现,该插件为您的模块加载相同的源但具有 RequireJS 注册这个单一来源作为不同的模块。

关于javascript - requirejs - 在不同文件中加载具有不同名称的相同模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15357058/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com