我使用Vite作为Nodejs项目的捆绑器。第一次安装Vite时,一切正常。但是当我试图再次安装其他软件包时,我遇到了以下错误:
node_modules/esbuild postinstall$ node install.js
│ node:internal/errors:867
│ const err = new Error(message);
│ ^
│ Error: Command failed: /usr/local/bin/node /Volumes/Data/Develop/waterial-react/node_modules/esbuild/bin/esbuild --version
│ /Volumes/Data/Develop/waterial-react/node_modules/esbuild/bin/esbuild:1
│ ����
│ SyntaxError: Invalid or unexpected token
│ at internalCompileFunction (node:internal/vm:73:18)
│ at wrapSafe (node:internal/modules/cjs/loader:1159:20)
│ at Module._compile (node:internal/modules/cjs/loader:1203:27)
│ at Module._extensions..js (node:internal/modules/cjs/loader:1293:10)
│ at Module.load (node:internal/modules/cjs/loader:1096:32)
│ at Module._load (node:internal/modules/cjs/loader:935:12)
│ at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:84:12)
│ at node:internal/main/run_main_module:23:47
│ Node.js v19.4.0
│ at checkExecSyncError (node:child_process:885:11)
│ at Object.execFileSync (node:child_process:921:15)
│ at validateBinaryVersion (/Volumes/Data/Develop/waterial-react/node_modules/esbuild/install.js:96:28)
│ at /Volumes/Data/Develop/waterial-react/node_modules/esbuild/install.js:281:5 {
│ status: 1,
│ signal: null,
│ output: [
│ null,
│ Buffer(0) [Uint8Array] [],
│ Buffer(662) [Uint8Array] [
│ 47, 86, 111, 108, 117, 109, 101, 115, 47, 68, 97, 116,
│ 97, 47, 68, 101, 118, 101, 108, 111, 112, 47, 119, 97,
│ 116, 101, 114, 105, 97, 108, 45, 114, 101, 97, 99, 116,
│ 47, 110, 111, 100, 101, 95, 109, 111, 100, 117, 108, 101,
│ 115, 47, 101, 115, 98, 117, 105, 108, 100, 47, 98, 105,
│ 110, 47, 101, 115, 98, 117, 105, 108, 100, 58, 49, 10,
│ 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189,
│ 7, 10, 10, 10, 83, 121, 110, 116, 97, 120, 69, 114,
│ 114, 111, 114, 58,
│ ... 562 more items
│ ]
│ ],
│ pid: 8362,
│ stdout: Buffer(0) [Uint8Array] [],
│ stderr: Buffer(662) [Uint8Array] [
│ 47, 86, 111, 108, 117, 109, 101, 115, 47, 68, 97, 116,
│ 97, 47, 68, 101, 118, 101, 108, 111, 112, 47, 119, 97,
│ 116, 101, 114, 105, 97, 108, 45, 114, 101, 97, 99, 116,
│ 47, 110, 111, 100, 101, 95, 109, 111, 100, 117, 108, 101,
│ 115, 47, 101, 115, 98, 117, 105, 108, 100, 47, 98, 105,
│ 110, 47, 101, 115, 98, 117, 105, 108, 100, 58, 49, 10,
│ 239, 191, 189, 239, 191, 189, 239, 191, 189, 239, 191, 189,
│ 7, 10, 10, 10, 83, 121, 110, 116, 97, 120, 69, 114,
│ 114, 111, 114, 58,
│ ... 562 more items
│ ]
│ }
│ Node.js v19.4.0
└─ Failed in 1.3s at /Volumes/Data/Develop/waterial-react/node_modules/esbuild
ELIFECYCLE Command failed with exit code 1.
我使用pnpm作为包管理器。我发现问题esbuild #1703, #1953和#1711可能与此有关,但没有多大帮助。我已经尝试将Node.js更新为v19.4.0
,但没有帮助。
我正在使用pnpm的故事书,这需要以下.npmrc
:
auto-install-peers=true
legacy-peer-deps=true
node-linker=hoisted
ignore-workspace-root-check=true
我不知道这是否导致了这个问题。我试图删除node_modules
并再次进行干净安装,它工作了。但我想知道是否有一个解决方案来解决这个问题完全没有删除node_modules
每次我安装的东西。
我使用vite@^4.0.4
(最新)和pnpm@7.25.0
(也是最新)。
提前感谢!
我得到了同样的错误,并通过运行:
npm install --save-dev --ignore-scripts esbuild@<vite-peerdependency-version>
我不认为这是一个永久的解决方案,但它为我解决了这个问题。
编辑:
我找到了一个更永久的解决方案,我降级了我的节点版本16.11.1
,并修复了它。此解决方案适用于多台计算机。
当项目中的多个依赖项需要esbuild时(特别是当单独的依赖项需要不同版本的esbuild时),我就经历过这种情况。试着找到一个通用的esbuild版本,它适用于你的repo中的所有依赖项,并在包中设置一个"overrides": { "esbuild": "x.y.z" }
。Json (npm 8.1)X或更高版本才需要使用覆盖)。就我个人而言,我很幸运地找到了适用于所有依赖项的最低通用版本,在某些情况下,我不得不锁定vite版本,以使用esbuild的兼容版本作为repo中的其他构建工具。试着得到它,当你npm ls esbuild
时,它会显示(deduped)
的所有内容,超过第一次引用esbuild,没有版本不兼容。
============
编辑:我上面的结论是不正确的。根本原因是我公司的本地npm注册表,node_modules/esbuild/bin/esbuild文件被损坏了。如果你遇到了这个问题,那么比较一下公共npm中的bin/esbuild文件和你公司的npm,看看你是否可以重新上传库。在我的例子中,我们的本地解决方案的bin/esbuild文件不知何故变成了一个实际的二进制文件,大小为9mb。来自公共npm注册表的脚本只有9kb,是一个简单可读的node/shell脚本。 https://github.com/evanw/esbuild/issues/3387