如何用 esbuild 的 dl.sh 从 npm 注册表直接下载当前平台的预编译二进制
2026/9/10 21:57:16 网站建设 项目流程

如何用 esbuild 的 dl.sh 从 npm 注册表直接下载当前平台的预编译二进制

【免费下载链接】esbuildAn extremely fast bundler for the web项目地址: https://gitcode.com/GitHub_Trending/es/esbuild

如果你不想走npm install,也不想用 Go 从源码编译,esbuild 仓库根目录提供了 dl.sh:它根据你当前系统的操作系统和架构,直接从 npm 注册表(registry.npmjs.org)下载对应平台的预编译二进制,解压后把可执行文件放到当前目录。完成后可得到一份esbuild可执行文件,用./esbuild --version验证即可。

该脚本只覆盖部分平台(macOS、Linux、NetBSD、OpenBSD 的少数架构组合),运行前还需要准备好curltar,并能访问 registry.npmjs.org。

运行前的准备:给脚本提供版本号

dl.sh全程通过$ESBUILD_VERSION拼下载 URL(如darwin-arm64-$ESBUILD_VERSION.tgz),但脚本本身并没有给这个变量赋值。由于脚本开头有set -eu,变量未定义时会在第一处引用就报错退出,所以执行前必须先导出它:

export ESBUILD_VERSION=0.28.1

0.28.1是当前仓库 version.txt 中记录、且 npm/@esbuild 下各平台package.json正在使用的版本。也可以替换为 npm 上已发布的任意其他版本号。

仓库里的dl.sh实际上是一个模板:RUNBOOK.md 说明每次发版时会自动按版本生成dl/v0.X.Ydl/latest两个脚本,把版本号直接写进对应的下载命令中。手动使用时,要么像上面那样导出变量,要么直接编辑脚本、把$ESBUILD_VERSION替换成具体版本号。

dl.sh 的执行流程与副作用

脚本做的事依次是:

  1. mktemp -d创建一个临时目录,所有下载动作都发生在里面;
  2. uname -ms取「系统 + 架构」,按case匹配到 npm 包名,并用curl -fo从 registry.npmjs.org 下载.tgz
  3. tar -xzf从压缩包中解出package/bin/esbuildmv到当前目录;
  4. rm删除临时目录里的 tgz。

脚本支持的完整平台清单(uname -ms输出 → npm 包):

uname -ms 输出下载的 npm 包
Darwin arm64@esbuild/darwin-arm64
Darwin x86_64@esbuild/darwin-x64
Linux arm64Linux aarch64@esbuild/linux-arm64
Linux x86_64@esbuild/linux-x64
NetBSD amd64@esbuild/netbsd-x64
OpenBSD arm64@esbuild/openbsd-arm64
OpenBSD amd64@esbuild/openbsd-x64

不在上表的平台会命中*)分支,打印error: Unsupported platform: <uname 输出>并以状态码 1 退出。

副作用只需要关心两点:会访问网络下载包;会在当前目录写入一个名为esbuild的文件。临时目录中的 tgz 会被脚本自己删掉,不会在系统其他位置留下文件。

执行下载

在希望放置可执行文件的目录中运行:

export ESBUILD_VERSION=0.28.1 sh dl.sh

执行成功时脚本没有额外输出,当前目录会出现esbuild文件。由于set -eu的存在,任何一步失败(网络不通、URL 404、当前目录不可写)都会立即中断,可以据此判断脚本是否完整跑完。

验证结果

--version参数检查拿到的二进制(该参数在仓库 Makefile 中也被用于检查构建产物):

./esbuild --version

输出应为版本号,与你导出的ESBUILD_VERSION一致。如果当前目录下已有旧的esbuild文件,先移走再运行,避免被覆盖或覆盖旧文件。

不支持的平台的替代方式

dl.shcase只覆盖上表 7 种组合,Windows、FreeBSD 等平台的组合都会走到报错分支。如果需要在这些平台拿二进制,可以参照仓库 Makefile 中validate-build目标使用的同一套 npm 注册表 URL 模式:

https://registry.npmjs.org/@esbuild/<平台包名>/-/<平台包名>-<版本号>.tgz

其中「平台包名」对应仓库 npm/@esbuild 下为每个平台单独发布的包(如win32-x64freebsd-x64,共 27 个)。下载后解压,二进制位于压缩包内的package/bin/esbuild(与dl.shtar -xzf ... package/bin/esbuild取到的路径一致)。

限制

  • 只支持上表列出的 7 种「系统 + 架构」组合,其余平台需手动按 URL 模式下载;
  • 版本号必须替换为 npm 上实际发布的版本,否则会 404;
  • 脚本最后会rm掉下载的 tgz,如需保留压缩包,自行用同一 URL 下载;
  • 二进制被mv到运行脚本时的当前目录,注意确认当前目录是你想要的位置。

【免费下载链接】esbuildAn extremely fast bundler for the web项目地址: https://gitcode.com/GitHub_Trending/es/esbuild

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询