requirejs再次执行require模块

requirejs再次执行require模块,requirejs,Requirejs,f、 e.我有: require( ['module1'], function( module1_callback){ //callback_1 after code is loaded } ); 和module1.js define( ['module2'], function(module2_callback) { //function_1 to perform something return 'something'; }); 我需要按需使用模块1,但每次我需要该模块时

f、 e.我有:

require( ['module1'], function( module1_callback){
//callback_1 after code is loaded
} );
和module1.js

define( ['module2'], function(module2_callback)
{
    //function_1 to perform something
    return 'something';
});
我需要按需使用模块1,但每次我需要该模块时,我都需要运行函数_1,
在这种情况下,模块1中的函数_1仅在第一次加载时执行,但我每次需要模块1时都需要该例程。只执行返回回调

这不是requirejs的工作方式。但您可以返回一个函数,该函数将执行某些操作,然后返回某些操作:

define( ['module2'], function(module2_callback) {
  return function() { 
    //to perform something
    return 'something';
  }
});
在基本模块中:

require( ['module1'], function( module1_callback){
   var something = module1_callback();
});

检索函数会带来更大的复杂性,在某些情况下,主干插件和循环依赖项不起作用,特别是在大型1页应用程序上,页面的某些部分需要从头开始重新初始化, 我最终使用了魔法模块

undef

define( ['module2', 'module'], function(module2_callback) {
     //push module id into global array 
     window.undefArr.push(module);
    //all code here will be executed on every require
});


这是否意味着每一个未定义的模块都需要重新加载,这对已编译的模块是如何工作的?上下文不会再次加载,它将从缓存中获取,但仅从文件上下文中获取,如果您的模块返回已编译的内容,它将重新编译,基本上它将重新对该模块进行评估。您的方法看起来有点过于复杂。在模块本身添加重置功能不是更容易吗。或者最好在模块中加入一个getter,为您提供一个新实例。我的应用程序每个部分使用1个文件作为所有主干集合,每个部分的每个视图使用1个文件,我实际上可以为每个文件使用1个集合/1个模块,但这是一个巨大的变化,模块和集合通常有5行长,因此,执行
undef
确实有帮助
//before require undef modules
//here you can control which modules undef which to leave in memory
//based on module properties like path, name, status etc.
_.each( window.undefArr, function(mod){
   requirejs.undef(mod.id);
});
//init undefArr
undefArr = [];
require( ['module1']);