1.科普
Nuxt是一個基于vue.js的應(yīng)用框架,可以做到服務(wù)器端渲染,解決vue動態(tài)生成頁面,難以SEO優(yōu)化的難題。詳情我這里不贅述了。想要了解的可以查看這里,Nuxt教程
PM2是一個進(jìn)程管理工具,用于啟動、維護(hù)Node的應(yīng)用程序。非常好用。關(guān)于PM2是什么的,可以查看這里,PM2教程
2.Nuxt部署的弊端
官方文檔提供了3種部署方法。想要了解更多的,請查看這里,Nuxt部署
- 服務(wù)端渲染應(yīng)用部署
- 靜態(tài)應(yīng)用部署
- 單頁面應(yīng)用程序部署 (SPA)
常用的是服務(wù)端渲染部署
Nuxt的生成的package.json如下:
"scripts": {
"dev": "nuxt",
"build": "nuxt build",
"start": "nuxt start",
"generate": "nuxt generate"
},
在package.json中提供了2個命令,用于服務(wù)端渲染部署
1. nuxt build 利用 webpack 編譯應(yīng)用,壓縮 JS 和 CSS 資源
2. nuxt start 以生產(chǎn)模式啟動一個 Web 服務(wù)器 (需要先執(zhí)行nuxt build)
部署的時候,我們通常先執(zhí)行 npm run build,編譯完成以后,再執(zhí)行npm run start就可以啟動nuxt了,其后再用nginx配置一個代理,Nuxt就可以被外界訪問了。
通常這樣是沒有問題。
但是遇到Nuxt更新就有問題了,Nuxt沒有提供停止服務(wù)的命令,這就導(dǎo)致,當(dāng)我們需要更新代碼的時候,必須手動殺死Nuxt的進(jìn)程。不熟悉Windows和Linux進(jìn)程命令的小伙伴,估計要在這里花不少時間了。這無疑給我們的部署工作增加了難度。
為了解決這個問題,因此我們必須引入一個進(jìn)程管理工具,便于我們啟動、重啟、關(guān)閉進(jìn)程。
對于Node來說,最常用的進(jìn)程管理工具,莫過于PM2了。
3.網(wǎng)上PM2部署Nuxt的方法
使用pm2部署nuxt,網(wǎng)上方法有很多,但是本人親測,百度的幾乎都不可用。不過我在這里也介紹出來,興許可能只是我電腦的問題。
3.1 pm2調(diào)用npm
pm2 start npm --name "你的項目名稱" -- run start
這個方法在我電腦上起不來,pm2 不是 error 就是 disabled
3.2 改良pm2調(diào)用npm
pm2 start "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" --name "xxx" -- run start
這個解決了3.1的問題,pm2也能正常啟動,但是就是沒法訪問Nuxt,不知道原因,知道的小伙伴,可以評論留言下。
3.3 pm2調(diào)用nuxt
pm2 start ./node_modules/nuxt/bin/nuxt.js-- start
這個方法啟動之后,電腦會一直彈窗cmd窗口。跟中了病毒一樣,而且無法傳參,也可能是我不會。所以也不能用。
3.4 改良pm2調(diào)用nuxt
安裝node-cmd,在nuxt根目錄創(chuàng)建startCmd.js文件,內(nèi)容如下:
const cmd = require('node-cmd');
cmd.run('yarn start');
調(diào)用
pm2 start startCmd.js --name "項目名稱"
pm2能啟動了,但是Nuxt無法訪問,不知道原因
4.正確的啟動nuxt
嘗試了以上的方法,并且百度了很久,依然沒找到解決辦法,后來我就不用百度了,改用bing國際版搜索,結(jié)果一下子就搜到了解決辦法。
Nuxt英文版的官方文檔上有如何使用PM2啟動Nuxt,不知道為啥中文網(wǎng)上沒有。
具體方法如下:
4.1 Nuxt根目錄新建ecosystem.config.js文件
內(nèi)容如下:
注意instances,官網(wǎng)是Max,一般cpu幾個核就啟動幾個,我只需要1個就夠了,所以改成了1。name也改成你自己應(yīng)用的名字就可以。
module.exports = {
apps: [
{
name: 'NuxtAppName',
exec_mode: 'cluster',
instances: '1', // Or a number of instances
script: './node_modules/nuxt/bin/nuxt.js',
args: 'start'
}
]
}
4.2 啟動
調(diào)用pm2 start就可以了。這時候Nuxt就可以訪問了。使用pm2 list也可以查看到nuxt進(jìn)程相關(guān)的信息。
未來就可以使用pm2管理Nuxt的啟動、重啟和終止了。
就是這么簡單,不知道為啥中文網(wǎng)竟然沒有,害得我費了老半天勁研究這個。
ecosystem.config.js的使用配置,可以查看這個大哥寫的 PM2配置
自此,完美收工。