先说结论:我是用nvm管理的node版本,那么我在切换node的时候,下载新的直接执行的是 nvm install xx ;这样直接下载的是 x86 的 node
解决方案:
1、先运行这个脚本,看看哪个用的是 x86
bash
nvm ls
for d in ~/.nvm/versions/node/*/bin/node; do
v=$(basename "$(dirname "$(dirname "$d")")")
printf '%-12s -> ' "$v"; file "$d" | sed 's/.*: //'
done
2、卸载到对应的 x86 版本重新安装;只要保证arch 是 arm64,那么你运行nvm install xx他会自己下载 arm 版本的。
报错信息如下:
bash
/opt/homebrew/bin/bun run dev
$ next dev
▲ Next.js 16.2.12 (Turbopack)
- Local: http://localhost:3000
- Network: http://172.16.30.112:3000
✓ Ready in 453ms
Using cached swc package @next/swc-darwin-x64...
⨯ ./app/globals.css
Error evaluating Node.js code
Error: Cannot find module '../lightningcss.darwin-x64.node'
Require stack:
- /Users/wangxucheng/Desktop/learn/next/next-app/node_modules/lightningcss/node/index.js
- /Users/wangxucheng/Desktop/learn/next/next-app/node_modules/@tailwindcss/node/dist/index.js
- /Users/wangxucheng/Desktop/learn/next/next-app/node_modules/@tailwindcss/postcss/dist/index.js
- /Users/wangxucheng/Desktop/learn/next/next-app/.next/dev/build/chunks/[root-of-the-server]__0oj80bi._.js
- /Users/wangxucheng/Desktop/learn/next/next-app/.next/dev/build/chunks/[turbopack]_runtime.js
- /Users/wangxucheng/Desktop/learn/next/next-app/.next/dev/build/56416d4ae4ce586f.js
[at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)]
[at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)]
[at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)]
[at Function._load (node:internal/modules/cjs/loader:1192:37)]
[at TracingChannel.traceSync (node:diagnostics_channel:322:14)]
[at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)]
[at Module.require (node:internal/modules/cjs/loader:1463:12)]
[at require (node:internal/modules/helpers:147:16)]
[at Object.<anonymous> (/Users/wangxucheng/Desktop/learn/next/next-app/node_modules/lightningcss/node/index.js:20:12)]
[at Module._compile (node:internal/modules/cjs/loader:1706:14)]
Import trace:
Client Component Browser:
./app/globals.css [Client Component Browser]
./app/layout.tsx [Server Component]
运行下面这个命令,看看你的 node 是不是基于x86 的;
bash
arch # 应该是 arm64;若是 i386,说明终端跑在 Rosetta 下
node -e 'console.log(process.arch)' # 应该是 arm64;若是 x64,就是它引起的报错!