Skip to content

Upgrade to Nuxt 4#16

Merged
thelooter merged 7 commits into
mainfrom
chore/major-upgrade
Jun 30, 2026
Merged

Upgrade to Nuxt 4#16
thelooter merged 7 commits into
mainfrom
chore/major-upgrade

Conversation

@thelooter

Copy link
Copy Markdown
Contributor

No description provided.

Signed-off-by: thelooter <evekolb2204@gmail.com>
Signed-off-by: thelooter <evekolb2204@gmail.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 24, 2025

Copy link
Copy Markdown

Deploying web with  Cloudflare Pages  Cloudflare Pages

Latest commit: b01f923
Status: ✅  Deploy successful!
Preview URL: https://519f6270.web-9b9.pages.dev
Branch Preview URL: https://chore-major-upgrade.web-9b9.pages.dev

View logs

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request upgrades the project from Nuxt 3 to Nuxt 4, which represents a major framework upgrade with significant dependency updates and new application code.

Key Changes:

  • Upgraded Nuxt from v3.19.3 to v4.2.1
  • Updated FontAwesome packages from v6.7.2 to v7.1.0 (major version bump)
  • Updated VueUse from v12.8.2 to v14.0.0 (major version bump)
  • Updated ESLint and related plugins to newer versions
  • Added Node.js engine requirements
  • Added new pages (team, privacy, legal, cookies, index, error)
  • Added new components (NavBar, Footer, Team, Highlight, Catch sections)
  • Added FontAwesome plugin configuration

Reviewed changes

Copilot reviewed 2 out of 23 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
package.json Updated all major dependencies for Nuxt 4 compatibility, added Node.js engine requirements
pnpm-lock.yaml Lockfile reflecting all dependency updates and version resolutions
eslint.config.js Minor path adjustment for ESLint config import
app/plugins/fontawesome.ts New plugin to configure FontAwesome icons globally
app/pages/*.vue New page components for team, privacy, legal, cookies, index, and error pages
app/components/*.vue New reusable components for navigation, footer, and content sections
app/layouts/default.vue New default layout wrapper
app/assets/* New CSS and image assets

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread eslint.config.js Outdated
Comment thread package.json Outdated
4everTheOne
4everTheOne previously approved these changes Nov 24, 2025

@4everTheOne 4everTheOne left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me

@4everTheOne

Copy link
Copy Markdown
Contributor

There are some suggestions from the bot and the linting is failing

- Prefix the .nuxt eslint config import with ./ so ESLint resolves it as a
  relative path instead of a package specifier (lint was failing with
  ERR_INVALID_MODULE_SPECIFIER).
- Set engines.node to ^20.19.0 || >=22.12.0 to match Nuxt 4.2.1's own
  requirement instead of the overly narrow ^22 || ^24 || ^25.
- Add trailing newline to package.json for prettier compliance.
Bring all dependencies up to date (PR had been open ~7 months):

Major bumps (verified compatible, build + lint + SSG output checked):
- eslint 9 -> 10, @eslint/js 9 -> 10, globals 16 -> 17
- @nuxtjs/robots 5 -> 6, @nuxtjs/sitemap 7 -> 8, nuxt-schema-org 5 -> 6

Minor/patch bumps:
- nuxt 4.2 -> 4.4, vue 3.5.25 -> 3.5.39, @vueuse/* 14.0 -> 14.3
- @fortawesome/* 7.1 -> 7.3, posthog-js, prettier, typescript-eslint, etc.

Held back intentionally:
- vue-router kept on 4.x (nuxt 4.4.8 requires vue-router ^4.6.3; 5.x is incompatible)
- @nuxt/devtools kept on 3.x (only a 4.0.0-alpha is newer)

Verified: pnpm lint, pnpm build and pnpm generate all pass; robots.txt,
sitemap.xml and schema.org JSON-LD generate correctly; all routes return 200.
The Lint workflow read engines.pnpm from package.json to feed
pnpm/action-setup's version input, but package.json declares the pnpm
version via the packageManager field instead, so engines.pnpm was
undefined. action-setup v4 reads packageManager on its own and errored
on the duplicate (ERR_PNPM_BAD_PM_VERSION: 'Multiple versions of pnpm
specified'), failing the job before lint ever ran.

Drop the manual version plumbing and let action-setup resolve pnpm from
the packageManager field. Apply the same fix to the deploy workflow,
which pinned version: 9.6.0 against packageManager pnpm@10.23.0 and would
have hit the identical error on merge to main.
Bump packageManager pnpm@10.23.0 -> pnpm@11.9.0 and adapt to pnpm 11's
new defaults:

- pnpm 11 enables a 1-day minimumReleaseAge supply-chain cooldown and
  re-verifies the lockfile on every install. Pin prettier (3.9.3) and
  posthog-js (1.396.2) to the latest releases older than the cooldown so
  the lockfile passes the policy; they will catch up on a later update.
- pnpm 11 reads settings from pnpm-workspace.yaml instead of .npmrc.
  Migrate shamefully-hoist and strict-peer-dependencies there and delete
  .npmrc. The hoist setting is required so @nuxt/eslint can resolve the
  TypeScript tooling and generate an eslint config that parses
  <script lang="ts"> blocks.
- pnpm 11 makes strictDepBuilds the default, so declare every dependency
  with an install script under allowBuilds. All are set to false (not
  run); the project builds, generates and runs without them.

Verified: install (incl. --frozen-lockfile), lint, build and generate
all pass; robots.txt, sitemap.xml and schema.org JSON-LD still generate.
@thelooter thelooter merged commit f0d3e19 into main Jun 30, 2026
3 checks passed
@thelooter thelooter deleted the chore/major-upgrade branch June 30, 2026 22:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants