多次使用 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;
});
您应该期望 bar
和 foo
都 === 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;
});
现在您可以随时执行您的功能
运行 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;
});
您应该期望 bar
和 foo
都 === 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;
});
现在您可以随时执行您的功能