是否可以取消 Javascript 中的模块?
Is it possible to unrequire a module in Javascript?
我正在使用 Browserify 来请求 JS 文件,例如 require('./typescript/build/crossing-puzzle-setup'
。但是,考虑到会有很多不同类型的谜题,我想知道,如果我不再需要某个模块,是否可以 "unrequire" ?
卸载模块没有什么意义,因为代码只占用非常少量的 RAM,而且不可能卸载它,因为引擎无法预测 require("some module")
不会再次调用, 所以它无法卸载该模块的存储数据。
如果您确实要加载太多代码,需要强制浏览器卸载它,您可以强制刷新页面,然后加载页面的先前状态。但是,用户会在刷新期间看到浏览器的“页面加载”指示器。
function startReload() {
// Save all the state you need into a string. An example object:
const importantAppState = {currentPuzzle: 'level1', username: 'roy'};
localStorage.setItem('stateBeforeReload', JSON.stringify(importantAppState));
window.location.reload();
}
// Run this function whenever your page loads:
function onLoad() {
const previousState = localStorage.setItem('stateBeforeReload');
if (previousState !== null) {
// you should re-initialize your app from the state here,
// dynamically calling `require` on only the files you need
localStorage.removeItem('stateBeforeReload');
}
}
寻找 nodeJS 解决方案的人:
require('../myLib');
delete require.cache[require.resolve('../myLib')];
不确定上面是否清除了与模块相关的100%内存。为此,一种安全的方法似乎是使用这个节点模块:node-disrequire
我正在使用 Browserify 来请求 JS 文件,例如 require('./typescript/build/crossing-puzzle-setup'
。但是,考虑到会有很多不同类型的谜题,我想知道,如果我不再需要某个模块,是否可以 "unrequire" ?
卸载模块没有什么意义,因为代码只占用非常少量的 RAM,而且不可能卸载它,因为引擎无法预测 require("some module")
不会再次调用, 所以它无法卸载该模块的存储数据。
如果您确实要加载太多代码,需要强制浏览器卸载它,您可以强制刷新页面,然后加载页面的先前状态。但是,用户会在刷新期间看到浏览器的“页面加载”指示器。
function startReload() {
// Save all the state you need into a string. An example object:
const importantAppState = {currentPuzzle: 'level1', username: 'roy'};
localStorage.setItem('stateBeforeReload', JSON.stringify(importantAppState));
window.location.reload();
}
// Run this function whenever your page loads:
function onLoad() {
const previousState = localStorage.setItem('stateBeforeReload');
if (previousState !== null) {
// you should re-initialize your app from the state here,
// dynamically calling `require` on only the files you need
localStorage.removeItem('stateBeforeReload');
}
}
寻找 nodeJS 解决方案的人:
require('../myLib');
delete require.cache[require.resolve('../myLib')];
不确定上面是否清除了与模块相关的100%内存。为此,一种安全的方法似乎是使用这个节点模块:node-disrequire