使用Yarn安装Vite React模板时,如何仅下载指定esbuild二进制文件?
问题描述
安装Vite React模板时Yarn出现卡顿,使用--verbose参数查看日志后,发现正在下载大量冗余的esbuild架构包,日志如下:
verbose 3.383394574 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.8.tgz". verbose 3.412297881 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.8.tgz". verbose 3.4289958 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.8.tgz". verbose 3.438138307 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.8.tgz". verbose 3.442030601 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.8.tgz". verbose 3.449186704 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.8.tgz". verbose 3.461365038 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.8.tgz". verbose 3.471498568 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.8.tgz". verbose 35.782801854 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.8.tgz". verbose 40.800013747 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.8.tgz". verbose 51.831574917 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.8.tgz". verbose 59.994924433 Performing "GET" request to "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.8.tgz".
请问是否可以仅下载linux-x64和linux-s390x版本的esbuild二进制文件?我的package.json配置如下:
{ "name": "app", "private": true, "version": "0.0.0", "type": "module", "scripts": { "dev": "vite", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { "autoprefixer": "^10.4.16", "react": "^18.2.0", "react-dom": "^18.2.0", "tailwindcss": "^3.3.6", "wouter": "^2.12.1", "zustand": "^4.4.7" }, "devDependencies": { "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@typescript-eslint/eslint-plugin": "^6.10.0", "@typescript-eslint/parser": "^6.10.0", "@vitejs/plugin-react": "^4.2.0", "eslint": "^8.53.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.4", "typescript": "^5.2.2", "vite": "^5.0.0" } }
解决方案
当然可以仅下载指定的linux-x64和linux-s390x版本esbuild二进制包,以下是几种可行的实现方式:
方式一:环境变量+手动补充安装
esbuild会根据当前系统的环境变量自动匹配对应的架构包,如果你默认运行环境是linux-x64,可以先通过环境变量限定安装该架构,再手动补充安装linux-s390x包:
# 仅安装linux-x64架构的esbuild ESBUILD_PLATFORM=linux ESBUILD_ARCH=x64 yarn install # 手动添加linux-s390x版本 yarn add @esbuild/linux-s390x@0.19.8 --dev
方式二:通过package.json的resolutions强制锁定
在你的package.json中添加resolutions字段,将所有不需要的esbuild架构包映射到你需要的版本,仅保留目标架构:
{ // 原有配置内容... "resolutions": { // 锁定所有esbuild相关包的版本为0.19.8 "@esbuild/*": "0.19.8", // 将其他架构包全部指向linux-x64,仅保留需要的两个架构 "@esbuild/android-arm": "@esbuild/linux-x64@0.19.8", "@esbuild/android-arm64": "@esbuild/linux-x64@0.19.8", "@esbuild/android-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/darwin-arm64": "@esbuild/linux-x64@0.19.8", "@esbuild/darwin-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/freebsd-arm64": "@esbuild/linux-x64@0.19.8", "@esbuild/freebsd-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-arm": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-arm64": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-ia32": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-loong64": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-mips64el": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-ppc64": "@esbuild/linux-x64@0.19.8", "@esbuild/linux-riscv64": "@esbuild/linux-x64@0.19.8", "@esbuild/netbsd-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/openbsd-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/sunos-x64": "@esbuild/linux-x64@0.19.8", "@esbuild/win32-arm64": "@esbuild/linux-x64@0.19.8", "@esbuild/win32-ia32": "@esbuild/linux-x64@0.19.8", "@esbuild/win32-x64": "@esbuild/linux-x64@0.19.8" } }
添加完成后,重新执行yarn install即可,Yarn会按照resolutions的配置只下载指定的架构包。
方式三:选择性安装依赖
直接通过命令行指定仅安装需要的两个架构包,同时忽略可选依赖:
yarn install --ignore-optional @esbuild/linux-x64@0.19.8 @esbuild/linux-s390x@0.19.8
注意:这种方式可能会导致esbuild在运行时如果检测到非目标架构环境时出错,仅推荐在固定环境下使用。
内容的提问来源于stack exchange,提问作者nerkn
相关产品推荐
相关产品推荐

