Requirejs加載js問題
在使用
require(['app1'], function (app1) {
console.log(app1);
});
加載app1模塊時,不配置requireJs.config中的path時,會請求當前html文件所在路徑下的app1.js
如果找不到,報如下錯誤
require.js:168 Uncaught Error: Script error for "app1.js"
https://requirejs.org/docs/errors.html#scripterror
at makeError (require.js:168)
at HTMLScriptElement.onScriptError (require.js:1738)
但是此時,如果再次執行腳本,使用同樣的模塊,並不會報錯
RequireJs不會多次加載js,同一個頁面RequireJs只會加載一次js文件,無論加載是否成功,都會在內部緩存中添加該模塊的緩存,所以不會再去請求js文件。
清除緩存
網上有文章提出採用
requirejs.config({
urlArgs: "bust=" + (new Date()).getTime()
});
該配置使requirejs在請求js時在url後面加上參數,這種方式在單頁面應用中依然無法生效,多次調用require方法不會多次請求js。但是該方法可以使用到require方法中例如
require(['./app1.js?v='+(new Date()).getTime()], function (app1) {
console.log(app1);
});
這種方式每次打開都會請求js,但是對於requirejs來説,每次調用方法都認為是不同的js,會使當前頁面requirejs的緩存擴大。
undef
requirejs提供了方法可以卸載已經加載的模塊,requirejs.undef("module")該方法會清除掉requirejs中的緩存,當下一次調用require方法時,requirejs找不到該模塊的緩存,會去請求js並創建緩存。
使用該方法可以達到js模塊熱加載的效果