← 返回博客列表

Deno、Deno Deploy 与 Bun 安装部署教程:安装脚本卡住、依赖下载超时与部署失败全解

2026-09-30 · 刺猬VPN

越来越多的项目开始用 Bun 代替 Node 跑脚本和测试,Deno 2 也补齐了对 npm 包的兼容,配合 Deno Deploy 可以几分钟把一个接口部署到全球边缘节点。但国内开发者的第一步往往就不顺:执行 curl -fsSL https://bun.sh/install | bash 之后终端停在「Downloading bun」不动;Windows 上用 PowerShell 跑 Deno 的安装脚本,报「无法连接到远程服务器」;好不容易装上了,bun install 又报「error: ConnectionRefused downloading package manifest」,deno run 导入远程模块时提示「error sending request」。

这些失败对应三个不同的环节:运行时本体的下载地址、依赖包的注册表、部署平台的控制台与构建服务。Bun 的安装包放在代码托管平台的发布页上,Deno 有自己的下载域名;依赖则分别来自 npm 注册表、JSR 与各种远程地址;Deno Deploy 的控制台和默认域名又是另一套。下面先对比两者的差异,再分别给出安装、依赖与部署的步骤和报错速查。

Deno 与 Bun 的区别

选型上可以这样理解:已有 Node 项目想提速,换 Bun 改动最小,它读取同一份 package.json 和锁文件之外的大部分配置;新项目希望默认安全、自带格式化与测试工具,并且想要一个省心的托管平台,Deno 加 Deno Deploy 更顺手。两者都在快速迭代,命令参数偶有变化,以官方文档为准。

对比项DenoBunNode
定位安全默认的运行时与工具链追求速度的运行时与包管理器最成熟的运行时
包来源JSR、npm、远程地址npm 注册表npm 注册表
权限模型默认无权限,需显式授权与 Node 一致默认全部权限
包管理配置deno.jsonbunfig.toml 与 .npmrc.npmrc
官方托管Deno Deploy无官方托管平台无官方托管平台
TypeScript原生支持原生支持需要额外工具或新版实验支持

安装、配置与部署:分步操作

  • 第一步:先把网络线路准备好。运行时安装包与官方文档都在境外,连上刺猬VPN 后再执行安装脚本;客户端注册只需自定义用户名和密码,不需要邮箱和手机号;注意终端程序不一定读取系统代理设置,脚本仍然卡住时检查终端的代理环境变量;
  • 第二步:安装 Bun。macOS 与 Linux 执行官方的 curl 安装脚本,Windows 在 PowerShell 里执行 irm bun.sh/install.ps1 | iex;也可以用已有的 npm 执行 npm install -g bun,安装包从 npm 注册表下载,镜像可用时更快;
  • 第三步:安装 Deno。macOS 与 Linux 执行官方的 curl 安装脚本,Windows 用 PowerShell 脚本或者 winget 安装,装完执行 deno --version 确认;
  • 第四步:给 Bun 配置依赖源。在项目根目录新建 bunfig.toml,在 [install] 段写 registry 指向你选用的镜像地址;较新版本的 Bun 也会读取项目里的 .npmrc;
  • 第五步:给 Deno 处理依赖。用 deno add 添加 JSR 或 npm 包,npm 包同样可以通过环境变量指定镜像;远程地址导入的模块没有镜像,只能依赖网络连通;
  • 第六步:本地跑通后部署到 Deno Deploy。登录控制台,用代码托管平台账号授权,新建项目并关联仓库,选择入口文件,推送代码即自动部署;
  • 第七步:部署成功后访问平台分配的默认域名测试接口,面向国内用户的服务建议在项目设置里绑定自己的域名,并按提示添加解析记录;
  • 第八步:把运行时版本写进项目文档或配置文件,团队成员与持续集成环境统一版本,避免同一份锁文件在不同版本下解析结果不一致。

按现象排查

按报错原文定位问题出在下载、依赖还是部署环节。

  • Bun 安装停在「Downloading bun」:安装包来自代码托管平台的发布页,确认线路已连上并检查终端代理变量,或改用 npm 全局安装;
  • curl 报「Failed to connect」或「Connection timed out」:终端没有走代理,或者节点地区访问该域名不稳定,换节点后重试;
  • bun install 报「ConnectionRefused downloading package manifest」:注册表连不上,在 bunfig.toml 里配置镜像,或确认代理变量已生效;
  • bun install 报「error: integrity check failed」:镜像同步滞后导致校验值不一致,删除锁文件里的对应条目或切回官方源重装;
  • deno 报「error sending request」或「tcp connect error」:远程模块地址连不上,确认线路后执行 deno cache 预先缓存依赖;
  • Deno Deploy 构建失败并提示找不到模块:入口文件路径或导入映射写错,核对 deno.json 与项目设置里的入口;
  • 部署成功但默认域名打不开:默认域名在部分网络环境下访问不稳定,绑定自有域名后再测试。

依赖源与线路方案对比

比较省事的组合是:日常装 npm 包用国内镜像,安装运行时、拉取 JSR 与远程模块、登录部署控制台时连上线路。刺猬VPN 的智能分流按域名和地址区分,国内镜像照常直连,境外地址走线路,两者可以同时生效。免费节点永久免费、不限流量,偶尔装包足够;需要频繁拉取依赖、长时间查文档的开发者,时长套餐期间不限流量、不限速。实际可用性取决于当前网络环境。

对比项官方源直连国内镜像官方源加线路
npm 包下载不稳定通常较快稳定性取决于节点
JSR 包不稳定镜像覆盖有限可正常访问
远程地址模块不稳定无镜像可正常访问
运行时安装包不稳定部分镜像提供可正常访问
同步时效实时可能滞后实时
适合场景海外服务器日常装包装新版本、查文档、部署

终端代理与环境变量

很多人以为电脑上开了代理,终端里的命令就会自动走代理,其实不然。浏览器读取系统代理设置,但 curl、Bun、Deno 这类命令行程序大多只认 HTTP_PROXY、HTTPS_PROXY 与 NO_PROXY 三个环境变量。如果你使用的代理工具提供本地代理地址,可以在当前终端里临时设置这几个变量,再执行安装命令;不想影响其他程序,就只在当前会话里设置,不写进全局配置。

NO_PROXY 用来排除不需要走代理的地址,比如本机、局域网和国内镜像域名,写进去之后这些请求会直连,速度更快也更稳定。设置完可以用 curl -I 访问一个境外地址测试,返回状态码说明代理已生效。Windows 的 PowerShell 设置变量的写法与 Linux 不同,用 $env:HTTPS_PROXY 的形式赋值。

升级与版本管理

两个运行时都自带升级命令:Bun 用 bun upgrade,Deno 用 deno upgrade,它们同样要从境外地址下载新版本,网络不通时会卡在下载阶段,处理方法和首次安装一样。升级之前先看一眼发行说明,大版本之间偶尔有不兼容的改动,比如配置文件字段改名、默认行为变化,直接升级可能让原本能跑的项目报错。

团队协作时,建议把版本号固定下来。可以在项目说明里写明所用版本,持续集成脚本里也安装同一个版本;需要在多个版本之间切换的开发者,可以借助版本管理工具,按项目自动切换。锁文件要提交进仓库,Bun 的锁文件格式在新版本里有过调整,升级后第一次安装会重写锁文件,记得一起提交,避免同事拉代码后反复出现无关的差异。

Deno Deploy 的环境变量与日志

接口上线后最常见的问题,是本地能跑、线上报错。多数原因出在环境变量:本地用 .env 文件读取密钥,线上没有配置,程序一启动就抛出未定义的错误。在项目设置里找到环境变量页面,把数据库地址、接口密钥逐一添加,保存后重新部署一次才会生效。密钥不要写进代码仓库,也不要打印到日志里。

排查线上问题时,先看控制台里的日志页面,它会实时显示请求记录和程序输出,启动失败的错误堆栈也在这里。如果日志里看到权限相关的报错,检查代码是否用到了平台不支持的接口,比如写本地文件、启动子进程等,边缘环境对这类操作有限制,需要改成调用外部存储服务。

与其他部署平台和包注册表的分工

Deno Deploy 适合跑轻量接口和边缘函数,前端站点与需要更完整构建流程的项目,更多人会选择其他托管平台,两者的构建配置、默认域名与国内访问情况对比见 Vercel 与 Netlify 部署指南。如果你的项目同时用到 npm、PyPI、Maven 等多个注册表,各自的镜像配置方法汇总在 开发包注册表与镜像配置。

一个实用的分工是:本地开发用 Bun 跑脚本和测试,享受它的安装速度;需要上线的小接口写成 Deno 兼容的代码,推到 Deno Deploy;前端站点放在专门的静态托管平台。不同平台的默认域名在国内的访问情况各不相同,面向国内用户的服务都建议绑定自有域名。上线前用国内几个不同运营商的网络各访问一次,确认解析和证书都正常,再把地址发给用户,能少掉很多事后的排查工作。持续集成里装依赖时也可以照样使用镜像,海外的构建机则直接用官方源。

常见报错速查表

现象原因解决办法
停在 Downloading bun安装包下载连不上确认线路与终端代理,或 npm 全局安装
ConnectionRefused downloading package manifest注册表连不上bunfig.toml 配置镜像
integrity check failed镜像同步滞后删除对应锁文件条目或切回官方源
error sending request远程模块地址连不上确认线路后 deno cache 预缓存
部署提示找不到模块入口文件或导入映射错误核对 deno.json 与项目入口
默认域名打不开默认域名访问不稳定绑定自有域名

高频问答

  • 问:Bun 能完全替代 Node 吗?答:大部分常见项目可以直接运行,但个别原生模块与边缘接口仍有兼容差异,上线前完整跑一遍测试;
  • 问:Deno 能用 npm 包吗?答:Deno 2 支持用 npm 前缀直接导入 npm 包,也支持 package.json;
  • 问:bunfig.toml 和 .npmrc 冲突怎么办?答:两处都配置时以官方文档说明的优先级为准,建议只保留一处,便于排查;
  • 问:Deno Deploy 免费吗?答:有免费额度,超出后按用量计费,以官方最新条款为准;
  • 问:为什么浏览器能打开官网,终端却下载失败?答:终端程序不读取系统代理,需要单独设置代理环境变量;
  • 问:安装脚本安全吗?答:只从官方域名获取脚本,执行前可以先下载下来查看内容。

把新运行时用顺手

Deno 与 Bun 安装卡住、依赖下载超时、Deno Deploy 部署失败,分别对应运行时下载、包注册表和部署平台三个环节。安装时确认终端代理生效,日常装包用镜像加锁文件,部署时核对入口文件并绑定自有域名,大多数问题都能一次解决。

刺猬VPN 采用 HTTPS+AES 加密传输,自定义用户名和密码即可匿名注册,不需要邮箱和手机号;免费节点永久免费、不限流量,适合安装运行时与查阅文档;时长套餐期间不限流量、不限速,适合需要频繁拉取依赖的开发者,智能分流让国内镜像照常直连,一个账号可在多台设备上同时使用。实际可用性取决于当前网络环境。

立即下载刺猬VPN:从注册到连接,三分钟完成

刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。