Nextjs 在 windows 上的部分打包及部署问题
最近在 windows 服务器上用 pm2 部署 Nextjs 项目时遇到了一些错误,遂水一下文章。
以下均为
standalone
模式下构建所遇到的问题,export
下未知
windows 上用 pnpm 包管理工具 build 报错 [operation not permitted, symlink xxx]
此问题详见 Nextjs Discussion
解决方案 1:使用其他包管理工具 npm yarn bun 等(纯扯淡)
解决方案 2:开启开发者模式
- win10 设置 -> 更新和安全 -> 开发者选项 -> 开启开发人员模式(因电脑而异)
- win11 系统 -> 开发人员模式(因电脑而异)
打包构建后的静态资源(css public 资源)访问 404
参考 Nextjs 文档
原因是打包的 .next
不包含静态资源(css、public 下的资源)
Nextjs 官方认为这些应该放在 CDN 上,但是可以手动复制到 .next 对应文件夹下
Mac 系统命令如下:
cp -r public .next/standalone/ && cp -r .next/static .next/standalone/.next/
Windows 上此处使用 cpr 包实现,你也可以用 node 自己实现该操作,在 next build
后执行命令即可
cpr public .next/standalone/public && cpr .next/static .next/standalone/.next/static
写在 package.json 中如下所示:
"build": "next build && npm run cp",
"cp": "cpr public .next/standalone/public && cpr .next/static .next/standalone/.next/static",
值得注意的是:Mac 下的 cp -r
是将 source 目录拷贝到 destination 下,而 cpr
这个包是将 source 目录下的文件拷贝到 destination 下,两者行为有差异
使用 pnpm 经常在多次 build 后构建错误
写个 script 脚本,在执行 build 之前执行脚本,将旧的 .next 构建删除掉基本就不会出现这个问题了。