构建部署

这篇笔记我们学习如何构建部署NextJS工程,以及如何进行多环境配置。

以生产模式运行NextJS

NextJS工程的npm script中,包含了命令buildstart,分别对应构建和启动服务端。

"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint"
}

执行命令npm run build后,NextJS会将构建结果输出到工程根目录的.next文件夹中。此时我们执行npm start即可运行NextJS服务端了。

使用pm2启动工程

在实际生产环境中,NodeJS一般以pm2nodemon等守护进程方式部署,这些NodeJS进程管理器会在NodeJS进程意外终止及时拉起进程,避免生产环境不可用。

pm2 start npm -- start

执行上述启动命令,即可以pm2守护进程方式启动NextJS。

如果使用Docker部署,我们需要以前台方式创建pm2进程,因此启动命令可以写为:

pm2 start npm --no-daemon -- start

多副本部署

多副本部署时有一点需要注意,我们应构建一次部署到多个服务器上,而不是在多个服务器上分别构建,建议通过Docker等方式进行部署。

多环境配置

另一个常见的需求是多环境配置,我们的一些配置项可能在开发、测试、生产环境有不同的参数,NextJS中可以通过环境变量配置文件进行配置,这些配置依赖于NodeJS的环境变量NODE_ENV。这里我们直接介绍配置的最佳实践,NodeJS工程的NODE_ENV支持几个标准的环境名:developmenttestproduction,相关的配置文件也要遵循这些标准命名,不要打破这个约定。我们的工程根目录中,可以设置如下几个配置文件。

|_ .env
|_ .env.development
|_ .env.production
|_ .env.local

我们记住以下3条规则:

  1. 如果我们以npm run dev启动工程,NextJS会默认设置当前环境为development,如果我们以npm start启动工程,NextJS会默认设置当前环境为production
  2. 多个配置文件的优先级从高到低依次是.env.local.env.$(NODE_ENV).env,如果存在相同的环境变量配置,高优先级的配置会覆盖低优先级的配置。
  3. .env存放各个环境通用的配置,.env.$(NODE_ENV)存放环境单独的配置,.env.local存放密码等敏感信息,它不应提交到版本控制系统。

至此,我们应该可以正确的进行多环境配置了。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。