Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Next.js项目部署到GitHub Pages问题整理

Next.js项目部署到GitHub Pages问题整理

作者头像
德顺
发布于 2023-12-02 03:10:40
发布于 2023-12-02 03:10:40
99700
代码可运行
举报
文章被收录于专栏:前端资源前端资源
运行总次数:0
代码可运行

最近准备写一个小工具,域名和技术栈都看好了。用 Next.js 写,因为它基于 React,并且对 SEO 也有一定的可扩展性,下面是 Next.js 的一些特性:

  • 零配置:无需任何配置,即可自动编译并打包,从一开始就为生产环境而优化。
  • 混合模式:在一个项目中同时支持构建时预渲染页面(SSG)和请求时渲染页面(SSR)。
  • 增量静态生成:在构建之后以增量的方式添加并更新静态预渲染的页面。
  • 支持 TypeScript:自动配置并编译 TypeScript。
  • 快速刷新:快速、可靠的实时编辑体验,已在 Facebook 级别的应用上规模上得到验证。
  • 基于文件系统的路由:每个 pages 目录下的组件都是一条路由。
  • API 路由:创建 API 端点(可选)以提供后端功能。
  • 内置支持 CSS:使用 CSS 模块创建组件级的样式。内置对 Sass 的支持。
  • 代码拆分和打包:采用由 Google Chrome 小组创建的、并经过优化的打包和拆分算法。

项目的安装过程就不写了,可以在 Next.js 官方文档 查看相关教程。

Github Pages 的设置流程参考:Astro网站部署到GitHub Pages踩坑记录,都是一样的。

GitHub 还是很人性化的,将项目 push 上去,打开 GitHub Pages 页面,Source 选择 GitHub Actions ,就会自动检测到是 Next.js 项目,提示配置部署文件。

我试了一下,会自动在项目根目录创建 .github/workflows/nextjs.yml 文件,提交后就会自动开始部署。

默认的配置文件有些复杂,而且会构建失败,我再此基础上根据自己的需求做了简化修改。

期间遇到了两个问题:

  1. 我本地使用的是 pnpm build,构建的时候会报错找不到 pnpm 依赖,可以使用 npm 命令打包。
  2. Next.js 项目不能像 Astro 那样构建完了就部署,部署完了直接访问会报 404 错误。需要配置 output'export'

Next.js 配置 output

在配置文件 next.config.js 中添加配置代码,添加完是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export' // 这里是添加的配置代码
}

module.exports = nextConfig

部署配置

先简单介绍几个命令:

设置 Node 版本为 18:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- name: Set Up Node.js
  uses: actions/setup-node@v3
  with:
    node-version: 18

安装依赖和编译项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装依赖
- name: Install dependencies
  run: npm i
# 编译
- name: Build with Next.js
  run: npm run build

最重要的一点,上传 build 的文件。(上面配置完后,编译完会在根目录生成一个 out 文件夹):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- name: Upload artifact
  uses: actions/upload-pages-artifact@v2
  with:
    path: ./out

这样把文件打包在 out 目录,部署的时候拉取这里的文件,就不会出现 404 了。看看效果:https://finai.fun

下面是完整的配置文件,重要的地方我都有注释,可以作为参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Sample workflow for building and deploying a Next.js site to GitHub Pages
#
# To get started with Next.js see: https://nextjs.org/docs/getting-started
#
name: Deploy Next.js site to Pages

on:
  # Runs on pushes targeting the default branch 从默认分支拉取代码
  push:
    branches: ["main"]

  # Allows you to run this workflow manually from the Actions tab 允许从"操作"选项卡手动运行此工作流
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 设置 GitHub UB_TOKEN 的权限以允许部署到 GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 仅允许一个并发部署,跳过在正在运行和最新排队之间排队的任务。

# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 但是,不要取消正在进行的任务,因为我们希望允许这些生产部署完成。
concurrency:
  group: "pages"
  cancel-in-progress: false
 
jobs:
  # Build job 部署任务
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      # 设置 Node 和指定版本
      - name: Set Up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 18
      - name: Setup Pages
        uses: actions/configure-pages@v3
        with:
          # Automatically inject basePath in your Next.js configuration file and disable 在 Next.js 配置文件中自动注入 basePath 并禁用
          # server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized). 服务器端镜像优化
          #
          # You may remove this line if you want to manage the configuration yourself. 如果您想自己管理配置,可以删除此行。
          static_site_generator: next
      - name: Restore cache
        uses: actions/cache@v3
        with:
          path: |
            .next/cache
          # Generate a new cache whenever packages or source files change. 当包或源文件发生更改时生成新的缓存。
          key: ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-${{ hashFiles('**.[jt]s', '**.[jt]sx') }}
          # If source files changed but packages didn't, rebuild from a prior cache. 如果源文件发生了变化但包没有变化,则从先前的缓存中重建。
          restore-keys: |
            ${{ runner.os }}-nextjs-${{ hashFiles('**/package-lock.json') }}-
      # 安装依赖
      - name: Install dependencies
        run: npm i
      # 编译
      - name: Build with Next.js
        run: npm run build
      # 上传工作 Build 完的静态文件会存放在 out 文件夹,在 next.config.js 中配置 output: 'export'
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v2
        with:
          path: ./out

  # Deployment job 部署工作
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2

以上是我在 GitHub Pages 部署 Next.js 项目时遇到的问题和解决方法,如果对你有帮助,欢迎评论、转发。

未经允许不得转载:Web前端开发资源网 » Next.js项目部署到GitHub Pages问题整理

推荐阅读:

Vue.js学习笔记——条件、循环、双向绑定

用css实现文本溢出 超出部分隐藏显示省略号

Z-Blog后台无法安装、更新应用的解决方法

解决margin击穿的几种方法

Bootstrap 模态框(Modal)插件的基本应用

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
使用 Github Actions 自动部署 Angular 应用到 Github Pages
最近在学习 Angular,一些基础的语法也学习的差不多了,就在 github 上新建了一个代码仓库,准备用 ng-zorro 搭个后台应用的模板,方便自己以后写些小东西时可以直接使用。前端项目,最主要的还是能够实际看到,因此考虑找个地方部署,因为自己的博客是部署到 github page 上的,并且这个项目也只是一个静态网站,所以这里同样选择使用 github page
程序员宇说
2020/07/21
1.7K0
使用 Github Actions 自动部署 Angular 应用到 Github Pages
HEXO系列教程 | 使用GitHub Actions部署Hexo / GitHub Pages | 全流程详细介绍
夜梦敢说这篇文章和HEXO系列教程 | 使用GitHub部署静态博客HEXO | 小白向教程是全网最详细的Hexo部署教程之二了!如果遇到问题你可以通过邮箱联系夜梦,夜梦看到了就会回复的!当然,再详细的文章也可能有错误,大家如果发现文章有问题的话请联系夜梦哦!
夜梦星尘
2024/08/20
6340
HEXO系列教程 | 使用GitHub Actions部署Hexo / GitHub Pages | 全流程详细介绍
【实操】基于 GitHub Pages + Hexo 搭建个人博客
开始之前,引用一篇《探索基于 Hadoop 的分布式文件处理系统》,该文详细介绍了基于 Hadoop 的分布式文件处理系统的设计与实现,系统采用经典的 Hadoop 架构模式,通过客户端、Hadoop 集群和结果存储模块实现大规模文件的高效处理。感兴趣的朋友可以研究下!
huazie
2024/11/20
6861
【实操】基于 GitHub Pages + Hexo 搭建个人博客
【玩转腾讯云】Github Actions+CVM实践(CICD如此简单)
简言之:它是github推出的持续集成部署的工具,目前优秀的cicd工具包括:travis ci,jenkins
醉酒鞭名马
2020/04/15
2.7K3
【玩转腾讯云】Github Actions+CVM实践(CICD如此简单)
GItHub 工作流 Actions的使用 以前端项目为例
官方以及第三方提供的actions 都收集在这里 Marketplace Actions
拿我格子衫来
2022/01/24
5930
GItHub 工作流  Actions的使用 以前端项目为例
1Panel自动同步Github仓库
芜湖!论文终于写完咯!查重率2%,AIGC率10%,鸡登AIGC查重,等我搞完这些事,我高低水一篇文章:《浅谈AIGC论文检测》!太抽象了!
柳神
2025/06/02
3360
1Panel自动同步Github仓库
利用Github Actions来部署Hexo
Hexo在本地运行时,每次都需要运行一套命令(hexo cl,hexo g,hexo d,hexo s),而且上传时长抽风(长期大量上传文件),本地基础文件又容易丢失。所以,我用github Actions来修补以上问题。 最开始很多关于github actions的文章大多没啥用,运行也会报错什么的。这里使用https://cloud.tencent.com/developer/article/2369534的教程。 我简单来描述教程,尽量多写代码,少文字。因为文字实在是太多,有的文章的看着很烦。 首先你需要准备: 1.新github闭源仓库一个(没有hexo d到库过的得还要个开源仓库) 2.(可有可无)Github desktop软件一个+github加速器(或改host host文件下载链接:https://raw.hellogithub.com/hosts) 3.配置好的hexo源文件一份 4.github tokens一份(新版github已改为Github => Settings => Developer settings => Tokens (classic) => Generate new token => Generate new token (classic)
诺依阁
2025/02/28
1700
通过Github Actions自动化Docker镜像打包和上传
可以了解到docker构建多架构镜像相关的信息和Github Actions的使用
用户6404053
2023/05/17
3.9K0
基于 Github Actions 自动部署 Hexo 博客
前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包、上传、解压和刷新 CDN,非常麻烦。我的服务器配置也不高 2C2G 无法安装 Jenkins,所以采用了比较简单和免费的 Github Actions 来进行打包、上传。然后我自己写了一个 Agent 来做解压和刷新 CDN 的工作,整套流程完全自动化。
晓晨
2022/09/07
1.1K0
基于 Github Actions 自动部署 Hexo 博客
如何优雅地部署一个 Serverless Next.js 应用
上一篇《前端福音:Serverless 和 SSR 的天作之合》,详细介绍了 SSR 相关知识,同时也提到了 Serverless 给 SSR 方案带来的福利。但它只是将 Next.js 应用部署到 Serverless 服务上而已,并不适合实际生产业务。为此本篇专门针对 Next.js 的 SSR 方案进行了探索和优化,一步一步带大家了解,如何基于 Serverless 架构部署一个实际的线上业务。
腾讯云serverless团队
2020/07/17
3.5K0
如何优雅地部署一个 Serverless Next.js 应用
CI/CD 实战:GitHub Actions 自动化部署 Spring Boot 项目
🌟 Hello,我是摘星!🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。🔬 每一次代码审查都是我的显微镜观察,每一次重构都是我的化学实验。🎵 在编程的交响乐中,我既是指挥家也是演奏者。让我们一起,在技术的音乐厅里,奏响属于程序员的华美乐章。
摘星.
2025/09/17
1030
CI/CD 实战:GitHub Actions 自动化部署 Spring Boot 项目
利用 GitHub Action 自动部署 Hexo 博客
使用 Hexo 写博客,每次写完都要生成静态文件,而且 Hexo 基于 Node.JS,不能再手机上更新。
OhhhCKY
2022/12/28
1.5K0
利用 GitHub Action 自动部署 Hexo 博客
【Hexo自动部署】优雅的使用 Github Actions 进行 Hexo 静态博客的持续集成与部署
  由于没有自己的云服务器,所以我之前选择博客工具的时候排除了Typora、Wordpress…转而选择了 Hexo,但其实相较于前者,Hexo 的云端写作体验一直很糟糕。   随着近两年 CI/CD、DevOps 这些概念的流行,很多工具都火了起来,像 Jenkins、Github的好基友Travis等等,但这些都不太适用我们的情况,Jenkins 也需要自己的服务器,而TravisCI我也测试了一下,本来是适用的,也很方便,但是官方宣布后续不再免费,只赠送 10000 积分用完即止,开通付费版则要 69刀/月 [俺支持不起,倒不如整一个云服务器,大佬请随意!]。   但是我偶然了解到全球最大的同性交友网站丢出了一个重磅炸弹-Github Actions,我发现利用此功能可以完美解决 Hexo 静态博客自动部署的问题,并且免费版每月赠送2000分钟的时长,完美!
老猫-Leo
2023/12/11
3.6K0
【Hexo自动部署】优雅的使用 Github Actions 进行 Hexo 静态博客的持续集成与部署
04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)
经过一番尝试学习,个人感受是其功能齐全,文档完善,使用 GitHub 托管仓库完成自己的 CI/CD,不再需要自己搞构建服务了。 关于使用费用问题:每个用户/组织都有免费的使用额度:2000 分钟/月, 不同的项目归类到不同的组织,完全足够使用了。
易墨
2023/08/28
1.2K0
04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)
[Github Action]PNPM monorepo docs package部署成Github Page
最近需要把一个前端工程转交出去给其他小伙伴接手; 因为一直在内部孵化,基本除了少数维护的几个人可能知根知底; 而对于其他人来说一片空白,所以需要提供一个文档体系来辅助别人上手;
CRPER
2023/06/09
6570
[Github Action]PNPM monorepo docs package部署成Github Page
来认真学一下,项目部署到 github pages
本文主要分享基于 vite 创建的前端项目如何部署到 github pages 上。你也可以参考其中的内容部署别的前端静态项目。
用户6901603
2024/07/25
8660
来认真学一下,项目部署到 github pages
简单使用vitepress快速搭建一个文档网站
VitePress 是一个静态站点生成器 (SSG),类似的项目有docsify、VuePress、hexo。
nine是个工程师
2024/09/29
5470
[Next] 初见next.js
  Next.js 可与 Windows,Mac 和 Linux 一起使用.您只需要在系统上安装 Node.js 即可开始构建 Next.js 应用程序.如果有个编辑器就更好了
不会飞的小鸟
2019/10/01
5.7K0
[Next] 初见next.js
Hexo博客利用GitHub Action自动化部署
CI\CD 即:持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续部署(Continuous Deployment)。GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可用于自动执行构建、测试和部署管道,换句话说就是通过 Actions 帮助我们去执行 hexo s & hexo g & hexo d 的操作并推到 xxx.github.io 仓库中
777nx
2023/05/02
1K0
Hexo博客利用GitHub Action自动化部署
记录一次Hexo持续集成部署尝试
鉴于已经实现了Coding与Github的双部署,而目前使用了GitHub的actions作为主要的生成Hexo页面的环境,但是由于私有仓库使用时间收到了限制。因此考虑将token方式转换为ssh方式。
Dreamy.TZK
2020/06/28
8680
推荐阅读
相关推荐
使用 Github Actions 自动部署 Angular 应用到 Github Pages
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验