在 Deno 中使用第三方模块时,会经常遇到模块瞬间升级导致的问题。以“abc”模块为例,当你在代码中引用了 "https://deno.land/x/abc@1.0.0/mod.ts" 这个地址时,如果当天该模块更新为了 2.0.0,那么第二天在执行代码时就会失败,在运行时控制台中提示 “Error: Unable to resolve module”的错误。本文将详细介绍如何解决这个问题。
解决方法
方案一:指定版本号
在引用第三方模块时,可以指定一个明确的版本号,而不是使用 "@latest" 来引用最新版本。对于比较稳定的项目来说,建议始终指定确定的版本号。例如:
------ - -- --- ---- ---------------------------------------
这样无论 "abc" 模块何时更新版本,你的代码都会始终引入 "1.0.0" 版本的模块。
方案二:使用缓存
Deno 在本地缓存了已经引用过的模块,并且存储到了 "$HOME/.cache/deno/deps/https/" 目录下,因此解决方法也很简单:只需在需要使用某个特定版本的模块的代码中,手动删除该模块的缓存即可。例如:
-- --- ----------------------------------------------
这样下一次运行代码时,Deno 将重新下载并存储新版本。
方案三:使用 lock 文件
在项目中使用 lock 文件可以解决此问题。lock 文件是一个 JSON 文件,在其中记录了项目依赖的确切版本。当你用命令 “deno cache --lock=lock.json ./mod.ts” 来执行程序时,Deno 会根据 lock 文件中所记录的版本号来下载和缓存相应版本的第三方库。例如:
- --------------- - ------ ------- - -
上述示例就是一个简单的 lock 文件配置,指定了 "abc" 模块的版本为 "1.0.0"。
结论
使用 Deno 时经常遇到的瞬间升级导致找不到模块的问题其实很好解决。通过指定确定的版本号、手动清除缓存或是使用 lock 文件都能有效地规避这类问题。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6729e3b8ddd3a70eb6ce9f7c