开发 Next.js 应用只是起始阶段,接下来的关键步骤是部署。此过程旨在使您的应用可被全网用户访问。有效的部署策略对于确保应用的性能、可扩缩性和可靠性至关重要。本指南将引导您完成 Next.js 应用的成功部署。
Next.js 是在 React 之上扩展的框架,通过新增功能,让构建并自动优化可用于生产用途的网站更加容易。
简单来说,Next.js 是一款可帮助您使用 React 构建现代应用的框架。它提供服务端能力,并内置图像优化与优化组件,在保持较小传输体积的同时带来更快的体验。
两者或许看起来相似,且都运行 JavaScript,但其定位与功能存在显著差异。
特征 | React(默认) | Next.js |
SEO 友好度 | 难度较大 | 对 SEO 友好 |
初始加载性能 | 较慢 | 更快 |
数据提取 | 需要手动实现 | 内置对 getServerSideProps 和 getStaticProps 的支持 |
转送 | 使用路由库(例如 React Router) | 基于文件系统的路由 |
复杂性 | 更简单 | 开箱即用程度更高 |
React(默认)
Next.js
SEO 友好度
难度较大
对 SEO 友好
初始加载性能
较慢
更快
数据提取
需要手动实现
内置对 getServerSideProps 和 getStaticProps 的支持
转送
使用路由库(例如 React Router)
基于文件系统的路由
复杂性
更简单
开箱即用程度更高
对于许多 React 应用,这些步骤大致相同,但我们建议使用 Next.js 框架。在高性能与高级需求场景下,此框架会管理多种组件,帮助更高效地扩展应用并优化 React 站点的 SEO。
您需要使用终端生成模板,以包含全部细节与代码要求。
使用终端:
npx create-next-app@latest
继续之前,您还需要进行一些配置。
您需要了解必要条件、所需信息(服务器或客户端)以及这些信息的获取位置。这些即为本次构建应包含的内容。
“这是为了提高性能和速度。”
同理,这有助于确认所需服务器端和/或客户端组件已就绪。
现在更新代码,并优化布局。
您可能需要了解相关信息,请参阅此文档。
完成这些更改后,设置即告完成。开始渲染。
为了获得最佳 SEO 效果,网站速度至关重要。仅靠 JavaScript 可能会降低渲染效率,并对搜索表现产生不利影响。不过,使用 Next.js 可以缓解这一问题。因此,应优先保证快速加载体验与高效的数据管理。要实现可靠的安全性与高质量产品,需谨慎使用测试数据,并遵守隐私与访问控制要求。
客户端路由
大多数 React 应用都会使用 react-router-dom 等库来处理导航。由于这一过程发生在浏览器端,托管服务器也必须相应配置以支持它。通常需将所有页面请求重定向到根 index.html,由 React Router 接管并渲染正确组件。
环境变量
您的应用很可能在开发与生产环境采用不同配置,例如 API 密钥或数据库端点。使用环境变量(例如通过 .env 文件)管理这些信息至关重要,可避免在源代码中暴露敏感信息。
后端 API 通信
React 前端负责界面呈现,但通常从后端 API 获取动态数据。部署时,须确保 React 应用使用生产 API 的正确网址;若该 API 托管在不同域名下,还需配置以处理跨源资源共享 (CORS)。
为确保迁移顺利进行。请确保数据与传输设置的相关细节均已落实。
按照这些步骤,确保各阶段都包含项目所需的全部细节。
# 仅在需要时安装依赖项 FROM node:16-alpine AS deps # 查看 https://github.com/nodejs/docker-node/tree/b4117f933ba60658f2812f36b8 117330a1dc25ab#alpine RUN apk add --no-cache libc6-compat WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci # 如果使用 turbo,也请取消注释此部分: # COPY turbo.json ./ # COPY .gitignore ./ # 添加环境变量 ENV NEXT_TELEMETRY_DISABLED 1 # 重建钩子用于检查应包含与不应包含的内容 RUN npm run build ############### #### 第 2 阶段:生产环境映像 ### ############### FROM node:16-alpine AS runner WORKDIR /app # 构建时可用的 NEXT_PUBLIC_... 环境变量。 ENV NODE_ENV production # 仅当您使用自定义配置文件时,才需要复制 next.config.js COPY --from=builder /app/next.config.js ./ COPY --from=builder /app/public ./public COPY --from=builder /app/.next ./.next COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json # 详情请参阅:https://cloud.google.com/run/docs /configuring/traffic ENV PORT 8080 EXPOSE 8080 CMD ["npm", "start"] |
# 仅在需要时安装依赖项
FROM node:16-alpine AS deps
# 查看 https://github.com/nodejs/docker-node/tree/b4117f933ba60658f2812f36b8
117330a1dc25ab#alpine
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
# 如果使用 turbo,也请取消注释此部分:
# COPY turbo.json ./
# COPY .gitignore ./
# 添加环境变量
ENV NEXT_TELEMETRY_DISABLED 1
# 重建钩子用于检查应包含与不应包含的内容
RUN npm run build
###############
#### 第 2 阶段:生产环境映像 ###
###############
FROM node:16-alpine AS runner
WORKDIR /app
# 构建时可用的 NEXT_PUBLIC_... 环境变量。
ENV NODE_ENV production
# 仅当您使用自定义配置文件时,才需要复制 next.config.js
COPY --from=builder /app/next.config.js ./
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json
# 详情请参阅:https://cloud.google.com/run/docs
/configuring/traffic
ENV PORT 8080
EXPOSE 8080
CMD ["npm", "start"]
现在开始部署。使用 Cloud Build 等平台,并关联/对接配置文件。
现在,可将 Cloud Run 作为最终承载方式;同时评估其是否适用、配置是否正确。请务必参考主要工具与示例代码,确保系统顺畅运行。
Firebase 也是出色的部署平台,请记住以下简单步骤。准备好在 Firebase 上集成 Next.js 了吗?请参阅完整文档。
按该映像或文档的要求进行配置(需要 SSL),以确保安全运行。
接下来说明如何安装并使用 CLI 与 Firebase。
npm install -g firebase-tools
按照“Firebase Init - Hosting”进行操作。
确保网址已被正确重写,并在命令行中填写无误。
选择“No”选项;这样在全部内容部署时更不易出错。
您需要进行本地测试,这要求在本地 (localhost) 运行代码。
完成 CLI 身份验证后,将其推送到此代码库:
现在开始上传:
如需查看 Cloud Run 的通用开发技巧完整列表,请参阅此文档。