Requirejs 要求js删除定义以强制重新加载

Requirejs 要求js删除定义以强制重新加载,requirejs,js-amd,Requirejs,Js Amd,出于测试目的,我试图删除一些amd模块并从服务器上重新加载更新版本,目的是不刷新浏览器 我目前正在执行以下操作,但浏览器仍无法从网络重新加载项目 var scripts = document.getElementsByTagName('script'); var context = require.s.contexts['_']; for (var key in context.defined) { if(key.indexOf("tests")>-1){ requirejs.un

出于测试目的,我试图删除一些amd模块并从服务器上重新加载更新版本,目的是不刷新浏览器

我目前正在执行以下操作,但浏览器仍无法从网络重新加载项目

var scripts = document.getElementsByTagName('script');
var context = require.s.contexts['_'];
for (var key in context.defined) {
  if(key.indexOf("tests")>-1){
  requirejs.undef(key);
  for (var i = scripts.length - 1; i >= 0; i--) {
  var script = scripts[i];
  var attr = script.getAttribute('data-requiremodule')
    if (attr === key){
    script.parentNode.removeChild(script);
    }
  }}
它从上下文中删除引用并成功删除脚本标记。 但是,唉

有人知道清除requirejs中所有引用的机制吗


非常感谢您的任何帮助

我们目前正在尝试此实现:

require.onResourceLoad = function(context, map)
{
    require.undef(map.name);
};
到目前为止还没有出现任何问题

编辑:IE不太关心这个修复。然而,铬和FF是好的


另外,您应该尝试在PhpStorm中进行实时编辑。工作起来很有魅力。可以看到一个演示。Chrome浏览器。这个答案类似于用户1903890,但我认为它很容易实现其他实现

基本上,我们必须将index.html中指定的main.js requirejs控制器封装在init函数中。一旦定义好了,我们就调用这个init函数来初始化requirejs

function init_requirejs(){
    console.log("--------------------------- INIT requirejs:");
    require([ "helpers/util"], function(util) {
        var count=0;
        $('#content').empty();

        $('#content').append("<input type='button' id='increment_button' value='click to increment the counter'>");
        $('#content').append("<h1 id='the_counter'>0</h1>");

        $('#content').append("<br><br><input type='button' id='init_button' value='click to initialize requirejs files'>");

        $('#increment_button').on('click', function(){
            count++;
            $('#the_counter').text(count);
        });
        $('#init_button').on('click', function(){
            end();
            init_requirejs();
        });

        util();

    });
};
init_requirejs();
我们需要一个reset requirejs配置函数来删除requirejs的实际实例,我们将使用require.unde函数来完成:

function end(){
    console.log("--------------------------- END requirejs:");
    all.map(function(item){
        require.undef(item);
    });
};
就这些

稍后,在我们的代码中,我们可以强制重新加载应用程序,而无需重新加载浏览器,只需调用end()函数和init_rquirejs()函数。例如,在jquery单击事件中:

$('#init_button').on('click', function(){
    end();
    init_requirejs();
});
演示的代码在中

还有一个在线版本

我希望这个解决方案对你有用


Juan

嗨,Chin,你检查我的回答了吗?我认为它解决了你的问题,不是吗?
$('#init_button').on('click', function(){
    end();
    init_requirejs();
});