多次使用RequireJS模块不会运行

时间:2015-03-18 17:15:59

标签: javascript requirejs

运行require(['pages/home'])只能运行一次,但如果我再次使用require(['pages/home']),则无法运行。
模块" pages / home"是一个名为" home.js"的文件。在名为" pages"。

的目录中

main.js

require(['pages/home']);

信息页/ home.js

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

3 个答案:

答案 0 :(得分:4)

RequireJS模块是单身人士。它只加载一次模块一次。如果已经加载了模块,则再次加载模块时所获得的是对最初加载的模块的引用。传递给define的工厂功能将不会再次运行。

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

让它返回一个可在需要后执行的函数/对象。

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

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