You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过编程获取Deno缓存的npm模块本地文件路径?

获取Deno中npm模块的本地缓存路径或内容

方法一:编程式推导缓存路径并读取内容

Deno的npm模块缓存有固定目录结构,结合Deno.resolveModuleSpecifier解析模块地址,就能推导本地缓存路径:

  1. 先解析模块指定符,拿到完整的模块URL:
    const specifier = "npm:ts-blank-space";
    const moduleUrl = await Deno.resolveModuleSpecifier(specifier);
    
  2. 从解析后的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("/");
    
  3. 确定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`
    );
    
  4. 拼接完整缓存路径并读取文件内容:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:30:03