如何通过编程获取Deno缓存的npm模块本地文件路径?
获取Deno中npm模块的本地缓存路径或内容
方法一:编程式推导缓存路径并读取内容
Deno的npm模块缓存有固定目录结构,结合Deno.resolveModuleSpecifier解析模块地址,就能推导本地缓存路径:
- 先解析模块指定符,拿到完整的模块URL:
const specifier = "npm:ts-blank-space"; const moduleUrl = await Deno.resolveModuleSpecifier(specifier); - 从解析后的URL中拆分出包名、版本号和入口路径:
// 匹配并提取包名、版本及入口路径 const matchResult = moduleUrl.href.match(/npm:([^@]+)@(.+)/); if (!matchResult) throw new Error("无法解析模块地址"); const [, pkgName, versionAndPath] = matchResult; const [version, ...entryPathParts] = versionAndPath.split("/"); const entryPath = entryPathParts.join("/"); - 确定Deno缓存目录(优先读取环境变量,否则按系统默认):
const homeDir = Deno.env.get("HOME"); const localAppData = Deno.env.get("LOCALAPPDATA"); const cacheDir = Deno.env.get("DENO_CACHE_DIR") || ( Deno.build.os === "darwin" ? `${homeDir}/Library/Caches/deno` : Deno.build.os === "linux" ? `${homeDir}/.cache/deno` : `${localAppData}\\deno\\cache` ); - 拼接完整缓存路径并读取文件内容:
const localCachePath = `${cacheDir}/npm/registry.npmjs.org/${pkgName}/${version}/${entryPath}`; // 先验证路径存在,再读取内容 try { await Deno.stat(localCachePath); const content = await Deno.readTextFile(localCachePath); console.log("模块内容:", content); } catch (err) { console.error("缓存文件不存在或读取失败:", err); }
方法二:通过deno info命令查看缓存路径
如果不需要编程式获取,直接在终端执行以下命令,输出结果里的local:字段就是模块的本地缓存路径:
deno info npm:ts-blank-space
重要提示
- 该方法依赖Deno当前的缓存目录结构,若后续Deno调整缓存机制,代码可能需要适配。
- 必须确保模块已被缓存(运行过导入该模块的代码,或执行
deno cache npm:ts-blank-space预缓存)。
内容的提问来源于stack exchange,提问作者mb21
相关产品推荐
相关产品推荐

