【親測可用】使用pm2部署nuxt項目

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)上沒有。

PM2啟動Nuxt英文教程地址

具體方法如下:

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配置

自此,完美收工。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容