需要JS - 几个问题



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

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

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

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

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

requirejs.undef()应该可以解决问题

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

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

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

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

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

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

将它们全部导出。

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

最后,自动命名是一个误解,你可以明确你的模块名称。

最新更新