版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33222871/article/details/83894054
环境依赖
- nuxt.js
- pm2
- nginx
- linux
原理
使用pm2来管理nuxt,启动两个不同端口的项目,再利用nginx切换反代端口
具体流程
- 修改对应的项目文件
- 修改nuxt.config.js代理的端口号(在配置项中写port,就可以修改端口号,不需要用官网上说的那套)
- 编译项目
- 由pm2启动新的进程
- 切换nginx代理的端口号
- pm2关闭旧进程
以上操作如果全由人工操作,相当的繁琐,因此我写了一个自启脚本
代码如下
# 初始化变量
#
oldPort=3000
newPort=3001
#
cd /usr/diy/project/node/school/
#
# # 判断需要使用的端口
result=$(grep "3001" nuxt.config.js)
if [ -n "$result" ]; then
# 找到3001端口
oldPort=3001
newPort=3000
fi
# # 修改端口号
echo "原node端口号为:$oldPort,修改为$newPort"
sed -i "s/$oldPort/$newPort/g" nuxt.config.js
#
# # 重新编译项目
echo "正在编译项目..."
result=$(npm run build)
# # echo "$result"
# echo "------"
# #result=$(grep "ERR" "$result")
# #echo "$result"
# if [ -n "$result"]; then
if [[ $result =~ "ERR" ]]; then
# # 编译失败
echo "--$result编译错误,请手动编译查看错误"
#
else
# # app name
name="school-$newPort"
# 判断是否使用该端口启动pm2
result=$(pm2 list | grep "$name")
if [ -z "$result" ]; then
echo "初次启用pm2,app name:$name"
# 没有使用过该端口
pm2 -n $name start ./node_modules/nuxt/bin/nuxt -- start
else
echo "重启pm2,app name:$name"
# 使用过该端口
pm2 start $name
fi
echo "更换nginx代理端口,原端口:$oldPort,修改为:$newPort"
sed -i "s/$oldPort/$newPort/g" /usr/diy/runtime/nginx/conf/vue.conf
echo "重启nginx"
nginx -s reload
echo "停止旧pm2 app name:school-$oldPort"
pm2 stop "school-$oldPort"
fi
#
#
目前使用3001和3000端口来回切换
其中pm2启动命令为pm2 -n name start ./node_modules/nuxt/bin/nuxt – start