我有一个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
答案 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文件夹中的更改。