11

在 node.js 我们可以使用

delete require.cache[require.resolve(somePath)];

在运行时删除需要缓存。

有没有类似的方法来删除 deno 中的运行时导入缓存?

4

4 回答 4

9

-ror选项将--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

于 2020-05-20T02:34:03.670 回答
5

到目前为止,我还没有找到清除缓存的命令。但是可以使用 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,清除缓存。希望这会有所帮助。

于 2021-04-18T08:47:25.990 回答
3

在路径中添加一个随机查询字符串,一定要保持正确的 extname:

const ext = path.extname(somePath);
const mod = (await import(`${somePath}?version=${Math.random()}${ext}`)).default;

它还支持本地文件路径,如const somePath = '../foo.tsx';

于 2020-05-20T02:55:36.423 回答
2

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; 
于 2020-05-20T02:38:54.257 回答