在dev = true模式下运行时Node NextJS应用程序重新编译

时间:2019-05-17 18:15:10

标签: node.js npm next.js

我有一个NextJS应用程序,我在构建服务器上构建该应用程序,然后将其部署到另一台服务器来托管它。

当我以开发模式启动应用程序时,npm希望重新编译应用程序,即使所有已构建的组件仍然存在。 (.next文件夹等...)

当我在非开发模式下运行该应用程序时,该应用程序将在没有任何构建尝试的情况下启动。

为什么const app = next({ true });时npm想要重建应用程序?

在server / server.js中

const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });

在package.json中

"scripts": {
    "dev": "NODE_ENV=development npm start",
    "staging": "NODE_ENV=staging npm start",
    "prod": "NODE_ENV=production npm start",
    "build": "next build",
    "start": "node server/server.js"
}

我如何启动应用程序:

发展:npm run dev

生产:npm run prod

1 个答案:

答案 0 :(得分:0)

由于缺乏更好的描述,.next文件夹是应用程序的“优化”版本。在开发中,您需要不断重建.next文件夹,因为这是您从中提供文件的位置。在开发过程中,您实际上可以看到.next自身的重建。在生产中,您只应构建一次应用程序。

我想如果您要在Now中进行部署,只要拥有脚本like they define in setup,它就会构建.next文件夹。但是,我将Docker用于构建,因此我必须通过构建步骤来构建.next文件夹。这是Dockerfile和相应的package.json的示例。

Dockerfile

FROM node:10-alpine AS builder
WORKDIR /app
COPY ./app .  
RUN yarn install && yarn next-build
EXPOSE 80
CMD yarn start

package.json

...
"scripts": {
   "next-build": "next build",
   "start": "NODE_ENV=production node server/app.js",
...

因此在生产中,我的构建步骤是 1.安装npm模块 2.建立我的.next资料夹 3.启动我的服务器。

简而言之: 在生产环境中,由于在运行“ npm run prod”之前没有运行“ next-build”脚本,因此不会重建.next文件夹。在开发中,每次启动服务器时next.js都会重新生成,以便它可以捕获.next文件夹中的更改。