5

很抱歉有点懒惰,没有自己尝试,但我认为 Stackoverflow 上的一个不错的答案也可能对其他一些人有所帮助。我正在考虑是否要使用requireJS来加载我的模块。目前我正在自己做这件事,所以我对requireJS有一些疑问。

  • requireJS 如何处理多个引用(是否缓存文件/模块)?

更准确地说,如果你有调用 likerequire(["some/module", "a.js", "b.js"], function...});并且你再次引用a.jsorb.js在稍后.requireor.define调用中,requireJS 如何处理这些?我的猜测是,它会完全忽略那些额外的引用,对吗?如果是这样,是否可以强制 requireJS重新加载脚本?

  • requireJS 是否总是通过网络传输文件,或者您可以静态加载模块?

我通常做的是连接我所有的 js 文件(包括模块),除了那些需要根据运行时条件加载的文件。据我阅读 requireJS 文档,您可以为模块定义自己的名称。所以我的问题是,你能加载一个已经存在于脚本中的模块,而不是通过网络传输它吗? 据我了解文档,名称是自动为模块创建的,基于它们的路径位置和文件名,所以这对我的要求没有意义。

4

2 回答 2

5

requirejs.undef()应该做的伎俩

于 2013-06-26T21:20:11.410 回答
3

通常,一个模块只会被 require.js 加载一次。require.js 将始终解决依赖关系并以正确的顺序加载模块,这样您就不必关心这些了。require对同一模块的后续调用将立即产生它。

无法重新加载模块。如果您确实需要多次加载同一个模块(不幸的是,这表明您的模块设计存在问题),您可以查看Multiversion 支持。

我不确定我是否理解“静态加载模块”的意思。但是,如果我猜对了,您想将多个模块作为一个模块加载并单独使用它们。这是可能的:通常在您的模块中,您将执行以下操作:

define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
    ...
    return exports;
});

whereexports或多或少可以是任何东西,一个函数,一个对象,等等。因此,您还可以执行以下操作:

define(['moduleA', 'moduleB', 'moduleC'], function (a, b, c) {
    ...
    return {moduleA: a, moduleB: b, moduleC: c};
});

一起导出它们。

但是请注意,您应该真正了解一下优化工具。它可以将相关模块组合在一起。

最后,自动命名是一种误解,您可以明确地对模块的名称进行命名。

于 2012-04-17T17:20:27.007 回答