我有一个Next.js应用程序,我通过运行来部署它
next build
next start
在服务器上。
在构建过程中,它会清除.next
构建文件夹中的文件,因此在几秒钟内,如果我尝试使用该应用程序,它会出现错误,因为文件不存在:
MissingStaticPage [Error]: Failed to load static file for page: /reporting/letter_exhibits ENOENT: no such file or directory, open '/home/polson/projects/JRP-Web-Tools/.next/server/pages/reporting/letter_exhibits.html'
一旦我等待构建完成,web应用程序就会按预期工作。
有没有一种方法可以改变构建过程,从而在构建过程中不会出现停机?
您可以使用这个简单的策略,尽管它不能保证"零";停机时间,但这将比目前的体验要好得多。基本上,您将项目构建到temp
文件夹中,然后删除现有的.next
文件夹,并将temp
文件夹重命名为.next
。
- 将其添加到
next.config.js
文件中:
distDir: process.env.BUILD_DIR || '.next',
- 创建一个包含以下内容的脚本:
echo "Deployment starting..."
# install dependencies if any
yarn || exit
# set build folder to `temp` and build
BUILD_DIR=temp yarn build || exit
if [ ! -d "temp" ]; then
echo ' 33[31m temp directory does not exist! 33[0m'
exit 1;
fi
# delete `.next` folder
rm -rf .next
# rename `temp` folder to `.next`
mv temp .next
# run next start
next start
echo "Deployment done."
不过,您可能应该使用像pm2这样的流程管理器来进行部署。