多次使用 RequireJS 模块不会 运行

Using a RequireJS module more than once does not run

运行 require(['pages/home']) 会工作一次,但如果我再次使用 require(['pages/home']) 就不会 运行.
模块 "pages/home" 是一个名为 "home.js" 的文件,位于名为 "pages".

的目录中

main.js

require(['pages/home']);

pages/home.js

define('pages/home', function() {
    console.log('running pages/home module');
});

RequireJS 模块是单例的。它只加载一次模块。如果一个模块已经被加载,如果你再次加载它,你得到的是对最初加载的同一个模块的引用。您传递给 define 的工厂函数不会是 运行 第二次。

所以您所看到的正是预期的结果。

模块中的静态代码不应被计算多次,就像通过普通 <script> 标记加载的脚本在页面加载期间不会被 运行 多次一样.

想象一下,如果一个模块包含如下代码:

define('my-module', function () {
  var foo = foo || 0;
  var bar = ++foo;
});

您应该期望 barfoo=== 1,但是如果模块重复 运行 并且存在全局 foo,那可能事实并非如此。不可否认,这是一个非常人为的例子,但反复评估一个模块可能会导致严重的问题。

使它return成为一个function/object,可以在你需要它之​​后执行。

define('pages/home', function() {
    return function(){
       console.log('running pages/home module');
    };
});
require(['pages/home'], function(resultFunc){
   window.YourFunc = resultFunc;
});

现在您可以随时执行您的功能