requireJS - 几个问题

jAn*_*ndy 5 javascript module requirejs

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

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

更确切地说,如果您有类似的电话,require(["some/module", "a.js", "b.js"], function...});并且您再次参考a.jsb.js稍后.require.define电话,requireJS如何处理这些?我的猜测是,它会完全忽略那些额外的引用,这是正确的吗?如果是这样,是否可以强制requireJS 重新加载脚本?

  • requireJS是否始终通过线路传输文件,或者您可以静态加载模块?

我通常做的是连接我的所有js文件(包括模块),除了那些需要根据运行时条件加载的文件.就我阅读requireJS doc而言,您可以为模块定义自己的名称.所以我的问题是,是否可以加载已存在于脚本中的模块,而无需通过线路传输? 据我所知,doc是根据模块的路径位置和文件名自动为模块创建的,所以这对我的要求没有任何意义.

Yac*_*ani 5

requirejs.undef() 应该做的伎俩


ggo*_*zad 3

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

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

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

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

其中exports或多或少可以是任何东西,一个函数,一个对象,等等。所以你也可以这样做:

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

将它们全部导出。

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

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