在 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 应用程序重新编译的主要内容,如果未能解决你的问题,请参考以下文章