一、背景
作为一个不到一年的前端小菜鸟,项目从开发到部署都让你做是什么样的感受?我最大的感受就是:真TM蛋疼,锅都让我背完了。
虽然有背不完的锅,但是学到的东西是真的多,今天我就讲一讲 nuxt.js 开发和用 pm2 部署 nuxt.js 过程中遇到的那些坑。
二、nuxt.js 中的 process.env
1、在 js 环境中可以使用 env 变量
值得注意的是,我们不能直接把 env 变量写在视图中,那会导致解析失败(应该不会有人这么做吧!)
2、打包后的的 env 变量将会化作静态数据
为什么要专门强调这一点呢?
一个项目是通过一个个小版本迭代逐步完善的,那么在这个过程中一定会区分开发部署和生产部署。既然我们使用了 env
这个东西,肯定是希望能动态的去设置一些东西,比如我们希望动态的显示当前是那种部署环境:
文章之初我们有讲到使用 pm2
去部署 nuxt.js
,pm2
是支持 env
注入的。那么你可能会疑问为什么不直接在 pm2
中去配置呢?标题已经告诉你答案了。
打包后的 env
变量化作静态数据后,最直接的结果就是无论你在 pm2
中如何配置,nuxt.js
中使用的都是默认配置,我想这应该不是各位想看到的画面吧!
pm2 env:pm2.keymetrics.io/docs/usage/…
那么该怎么来验证上述内容呢?请看下图:
pm2 部署
1、简单的 nuxt.js 部署
本次部署的预期结果应该是“8001生产服”,然而实际情况与预期完全不符。从这次部署也能验证前面所讲到的“打包后的的 env 变量将会化作静态数据”。
2、nuxt.js 在不同环境中的打包和部署(动态部署)
为了解决上面的问题,目前我想到的是在打包的上面做功夫,我们只需要在打包命令中把 env 参数传进去即可。
然后我们按照图示分别进行打包部署并访问,以下是访问结果:
3、在动态部署中配置 axios 跨域代理
菜鸟前端(比如我)在遇到跨域问题时,就只能去“求”后端大神了。然而大神却说这不是他的问题,没办法只能硬着头皮上了,然后一阵百度猛如虎,一看战绩:0-5。有没有很强的既视感。
其实在 nuxt.js
中没必要这么麻烦,nuxt.js
有配套的 axios
库 @nuxtjs/axios
,我们只需要在 nuxt.config.js
进行简单配置即可,如下图:
补充说明
1、使用 Nginx 反向代理 pm2 服务
即使我们使用 pm2
部署了 nuxt.js
程序,我们在公网上也是无法访问到的,那该怎么办呢?请百度“Nginx反向代理pm2”,由于作者对 Nginx
连简单的会用都算不上,就不在这里献丑了。
2、nuxt.js 官方的 pm2 和 Nginx 使用文档
3、pm2 还可以这样配置
在上面的示例中,我们对 pm2
的配置是统一放在 ecosystem.config.js
文件中的。如果你想通过指定配置文件的形式启动 pm2
服务,你会发现执行 pm2 start ecosystem.*.js
与你预期的效果完全不一样。
针对这种需求,我们就不能把配置写在 .js
文件中了,而是写在 .json
文件中,比如: