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

标签 javascript requirejs amd

使用 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'),您将获得相同模块。那么根据您设置的path,您真正想要什么? 相同模块还是不同模块?

RequireJS 有办法同时满足您的需求。如果您希望两个模块名称为您提供相同的模块,那么您可以删除 paths 配置并使用 map 配置:

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

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

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

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

相关文章:

javascript - Css transition scale+rotate on :hover have a shaking glitch in IE 10

javascript - vue js Prop 重置计时器

node.js - deserializeUser 被客户端 requirejs 应用多次调用

javascript - 有没有办法将所有语言添加到优化的 RequireJS 项目中?

javascript - Polymer 1.0 - 将 CSS 类与属性绑定(bind)

javascript - 如何在另一个方法中使用从一个方法内的嵌套函数返回的值?

javascript - Grunt build 没有暴露我需要的全局变量

javascript - 如何使用 requireJS 访问模块变量?

javascript - Require.js 版本单独文件

javascript - 使用 Jasmine 测试 RequireJS