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

在Deno Deploy中使用noble-secp256k1的模块导入问题求助

解决Deno本地与Deploy的secp256k1导入兼容问题

问题拆解

你的情况属于典型的Deno环境差异冲突:

  • 本地Deno支持npm:前缀导入,但Deno Deploy暂不支持该语法
  • 换用deno.land/x的secp256k1包时,该包内部直接导入了Node.js的crypto模块,而Deno要求Node内置模块必须添加node:前缀,因此本地运行报错

三个可行解决办法

办法1:用导入映射绕开源码问题

无需修改第三方包,通过Deno的导入映射将crypto重定向到node:crypto:

  1. 在项目根目录创建import_map.json文件,内容如下:
{
  "imports": {
    "crypto": "node:crypto"
  }
}
  1. 本地运行时添加参数指定导入映射:
deno run --import-map=import_map.json 你的脚本文件名.ts
  1. 部署到Deno Deploy时,在项目设置中指定该导入映射文件即可(Deploy原生支持导入映射功能)

办法2:直接用CDN的ES模块版本

跳过npm:前缀,使用CDN提供的@noble/secp256k1原生ES模块,Deno和Deploy均可识别:
将导入语句修改为:

import * as secp256k1 from "https://cdn.jsdelivr.net/npm/@noble/secp256k1@1.7.1/index.js";

建议固定版本号,避免使用latest,防止后续版本更新引发未知问题

办法3:修改第三方包源码(适合自定义需求场景)

如果前两种方法不符合你的需求,可以自行修改deno.land/x上的secp256k1包:

  1. 将deno.land/x上的secp256k1仓库fork到自己的代码托管账号
  2. 找到仓库中的index.ts文件,将第6行的import "crypto"修改为import "node:crypto"
  3. 使用自己fork后的仓库链接导入模块,示例:
import * as secp256k1 from "https://raw.githubusercontent.com/[你的用户名]/secp256k1/[你的分支]/mod.ts";

内容的提问来源于stack exchange,提问作者Uri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:03