在 node.js 我们可以使用
delete require.cache[require.resolve(somePath)];
在运行时删除需要缓存。
有没有类似的方法来删除 deno 中的运行时导入缓存?
-r
or选项将--reload
重新编译导入的模块。
-r, --reload=<CACHE_BLACKLIST> Reload source code cache (recompile TypeScript)
https://deno.land/manual#other-key-behaviors
其他关键行为
- 远程代码在首次执行时被获取和缓存,并且在使用 --reload 标志运行代码之前永远不会更新。(所以,这仍然适用于飞机。)
- 从远程 URL 加载的模块/文件旨在是不可变的和可缓存的。
您可以传递参数以重新加载特定模块:
--reload=https://deno.land/std
https://deno.land/manual/linking_to_external_code/reloading_modules
到目前为止,我还没有找到清除缓存的命令。但是可以使用 deno 从 deno 获取当前缓存目录deno info
。输出将如下所示:
DENO_DIR location: "/Users/tgm/Library/Caches/deno"
Remote modules cache: "/Users/tgm/Library/Caches/deno/deps"
Emitted modules cache: "/Users/tgm/Library/Caches/deno/gen"
Language server registries cache: "/Users/tgm/Library/Caches/deno/registries"
所以删除目录内的文件DENO_DIR
,清除缓存。希望这会有所帮助。
在路径中添加一个随机查询字符串,一定要保持正确的 extname:
const ext = path.extname(somePath);
const mod = (await import(`${somePath}?version=${Math.random()}${ext}`)).default;
它还支持本地文件路径,如const somePath = '../foo.tsx';
Deno 自 19 年 8 月起支持动态导入,我认为你可以做的就是
let neededModule = getNeededModule();
import neededModule;
...
neededModule = getAnotherModule(); //Replace in runtime
import neededModule
...
//Or even delete in runtime (with some help from the garbage collector)
neededModule = null;