この回答はuser1903890に似ていますが、他の実装を行うのは簡単だと思います。
基本的に、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();
また、require.onResourceLoad 関数を使用して、requirejs アプリに参加するすべてのファイルを保存する必要があります。
var all=[];
require.onResourceLoad = function (context, map, depArray) {
all.push(map.name);
};
また、requirejs の実際のインスタンスを削除するには、requirejs 構成のリセット関数が必要です。これは、require.undef 関数で行います。
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();
});
デモのコードは
https://github.com/juanantonioruz/requirejs-force-reloadにあります
そしてオンライン版
https://dl.dropboxusercontent.com/u/8688858/requirejs-force-reload/project.html
この解決策がうまくいくことを願っています!
ファン