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

Posted

技术标签:

【中文标题】在 dev = true 模式下运行时节点 NextJS 应用程序重新编译【英文标题】:Node NextJS app recompiling when running in dev = true mode 【发布时间】:2019-10-05 02:16:02 【问题描述】:

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

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

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

const app = next( true );时npm为什么要重建app?

在 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】:

由于缺乏更好的描述,.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 文件夹中的更改。

【讨论】:

以上是关于在 dev = true 模式下运行时节点 NextJS 应用程序重新编译的主要内容,如果未能解决你的问题,请参考以下文章

为电子安装模块时节点模块版本冲突

D3.js 重新启动模拟时节点跳转添加或删除节点

使用 nvm 时节点在哪里?

下载文件时节点渲染过程消失

红黑树插入:为啥插入时节点会变成红色?

计算机重新启动时节点版本重置