运行require(['pages/home'])
会运行一次,但如果我再次使用require(['pages/home'])
,它将不会运行
模块"pages/home"是名为"pages"的目录中的一个名为"home.js"的文件。
main.js
require(['pages/home']);
pages/home.js
define('pages/home', function() {
console.log('running pages/home module');
});
RequireJS模块是singleton。它只加载一次模块。如果一个模块已经加载,那么如果再次加载它,则会得到与最初加载的模块相同的引用。传递给define
的工厂函数不会再次运行。
所以你所看到的正是人们所期望的。
模块中的静态代码不应该被评估多次,就像通过普通<script>
标记加载的脚本在页面加载期间不会运行多次一样。
想象一下,如果一个模块包含以下代码:
define('my-module', function () {
var foo = foo || 0;
var bar = ++foo;
});
您应该期望bar
和foo
都是=== 1
,但如果模块重复运行并且存在全局foo
,则情况可能并非如此。诚然,这是一个非常人为的例子,但重复评估模块可能会导致严重的问题。
使其返回一个函数/对象,该函数/对象可以在您需要后执行。
define('pages/home', function() {
return function(){
console.log('running pages/home module');
};
});
require(['pages/home'], function(resultFunc){
window.YourFunc = resultFunc;
});
现在,您可以随时执行您的函数