Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: drop Node.js 16 #56896

Merged
merged 12 commits into from
Oct 16, 2023
2 changes: 1 addition & 1 deletion .github/actions/needs-triage/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ name: 'Issue auto label'
description: 'vercel/next.js specific auto-labeling action'
author: 'Next.js team'
runs:
using: 'node16'
using: 'node20'
main: 'index.js'
2 changes: 1 addition & 1 deletion .github/actions/next-stats-action/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ RUN apt install unzip wget curl nano htop screen build-essential pkg-config libs

RUN ln $(which python3) /usr/bin/python

RUN curl -sfLS https://install-node.vercel.app/v18 | bash -s -- -f
RUN curl -sfLS https://install-node.vercel.app/v18.18.2 | bash -s -- -f
RUN corepack enable

WORKDIR /next-stats
Expand Down
2 changes: 1 addition & 1 deletion .github/actions/next-stats-action/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
"typescript": "5.1.6"
},
"engines": {
"node": ">=16.14.0",
"node": ">=18.18.2",
"pnpm": "8.9.0"
},
"packageManager": "pnpm@8.9.0"
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/build_and_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ on:
env:
NAPI_CLI_VERSION: 2.16.2
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
balazsorban44 marked this conversation as resolved.
Show resolved Hide resolved
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20
CARGO_PROFILE_RELEASE_LTO: 'true'
TURBO_TEAM: 'vercel'
TURBO_REMOTE_ONLY: 'true'
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ on:
env:
NAPI_CLI_VERSION: 2.14.7
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20
TEST_CONCURRENCY: 8
# disable backtrace for test snapshots
RUST_BACKTRACE: 0
Expand Down Expand Up @@ -147,7 +146,7 @@ jobs:
group: [1, 2, 3, 4, 5]
uses: ./.github/workflows/build_reusable.yml
with:
nodeVersion: 16
nodeVersion: 18.18.2
skipForDocsOnly: 'yes'
afterBuild: RUST_BACKTRACE=0 NEXT_EXTERNAL_TESTS_FILTERS="$(pwd)/test/turbopack-tests-manifest.json" TURBOPACK=1 node run-tests.js --timings -g ${{ matrix.group }}/5 -c ${TEST_CONCURRENCY} --type integration
secrets: inherit
Expand Down Expand Up @@ -212,7 +211,7 @@ jobs:

uses: ./.github/workflows/build_reusable.yml
with:
nodeVersion: 16
nodeVersion: 18.18.2
skipForDocsOnly: 'yes'
afterBuild: node run-tests.js --timings -g ${{ matrix.group }}/12 -c ${TEST_CONCURRENCY} --type integration
secrets: inherit
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/build_reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ on:
env:
NAPI_CLI_VERSION: 2.14.7
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20
TEST_CONCURRENCY: 8
# disable backtrace for test snapshots
RUST_BACKTRACE: 0
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/code_freeze.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ name: Code Freeze
env:
NAPI_CLI_VERSION: 2.14.7
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20

jobs:
start:
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/pull_request_stats.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@ name: Generate Pull Request Stats
env:
NAPI_CLI_VERSION: 2.14.7
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20
TEST_CONCURRENCY: 6

TURBO_TEAM: 'vercel'
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/test_e2e_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ jobs:
DATADOG_API_KEY: ${{ secrets.DATA_DOG_API_KEY }}
NAPI_CLI_VERSION: 2.16.2
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20
CARGO_PROFILE_RELEASE_LTO: 'true'
TURBO_TEAM: 'vercel'
TURBO_REMOTE_ONLY: 'true'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/test_examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node: [16, 18]
node: [18, 20]
steps:
- uses: actions/checkout@v3
with:
Expand All @@ -37,7 +37,7 @@ jobs:
- name: Setup node
uses: actions/setup-node@v3
with:
node-version: 16
node-version: 18
check-latest: true
- run: corepack enable

Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/trigger_release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ name: Trigger Release
env:
NAPI_CLI_VERSION: 2.14.7
TURBO_VERSION: 1.10.9
NODE_MAINTENANCE_VERSION: 16
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20

jobs:
start:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/update_fonts_data.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
workflow_dispatch:

env:
NODE_LTS_VERSION: 18
NODE_LTS_VERSION: 20

jobs:
create-pull-request:
Expand Down
10 changes: 5 additions & 5 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ pr:
variables:
PNPM_CACHE_FOLDER: $(Pipeline.Workspace)/.pnpm-store
NEXT_TELEMETRY_DISABLED: '1'
node_16_version: ^16.14.0
node_version: ^18.18.2

stages:
- stage: Test
Expand All @@ -45,7 +45,7 @@ stages:
steps:
- task: NodeTool@0
inputs:
versionSpec: $(node_16_version)
versionSpec: $(node_version)
displayName: 'Install Node.js'

- bash: |
Expand Down Expand Up @@ -84,7 +84,7 @@ stages:

- task: NodeTool@0
inputs:
versionSpec: $(node_16_version)
versionSpec: $(node_version)
displayName: 'Install Node.js'

- bash: |
Expand Down Expand Up @@ -117,7 +117,7 @@ stages:
steps:
- task: NodeTool@0
inputs:
versionSpec: $(node_16_version)
versionSpec: $(node_version)
displayName: 'Install Node.js'

- bash: |
Expand Down Expand Up @@ -154,7 +154,7 @@ stages:
steps:
- task: NodeTool@0
inputs:
versionSpec: $(node_16_version)
versionSpec: $(node_version)
displayName: 'Install Node.js'

- bash: |
Expand Down
4 changes: 0 additions & 4 deletions docs/04-architecture/supported-browsers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,6 @@ Next.js allows you to use the latest JavaScript features out of the box. In addi
- [Class Fields](https://github.com/tc39/proposal-class-fields) and [Static Properties](https://github.com/tc39/proposal-static-class-features) (part of stage 3 proposal)
- and more!

### Server-Side Polyfills
Copy link
Member Author

Choose a reason for hiding this comment

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

fetch is not polyfilled anymore (not needed), but I think this section could be its own page anyway.


In addition to `fetch()` on the client-side, Next.js polyfills `fetch()` in the Node.js environment where it's not yet available. It uses `undici`, the same implementation that Node.js itself uses. You can use `fetch()` in your server code (such as `getStaticProps`/`getServerSideProps`) without using polyfills such as `isomorphic-unfetch` or `node-fetch`.

### TypeScript Features

Next.js has built-in TypeScript support. [Learn more here](/docs/pages/building-your-application/configuring/typescript).
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@
"@types/react-dom": "18.2.4"
},
"engines": {
"node": ">=16.14.0",
"node": ">=18.18.2",
"pnpm": "8.9.0"
},
"packageManager": "pnpm@8.9.0"
Expand Down
2 changes: 1 addition & 1 deletion packages/create-next-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@
"validate-npm-package-name": "3.0.0"
},
"engines": {
"node": ">=16.14.0"
"node": ">=18.18.2"
}
}
2 changes: 1 addition & 1 deletion packages/next/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -316,6 +316,6 @@
"zod": "3.22.3"
},
"engines": {
"node": ">=16.14.0"
"node": ">=18.18.2"
}
}
16 changes: 0 additions & 16 deletions packages/next/src/bin/next.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,22 +94,6 @@ if (process.env.NODE_ENV) {
;(process.env as any).NODE_ENV = process.env.NODE_ENV || defaultEnv
;(process.env as any).NEXT_RUNTIME = 'nodejs'

// x-ref: https://github.com/vercel/next.js/pull/34688#issuecomment-1047994505
if (process.versions.pnp === '3') {
const nodeVersionParts = process.versions.node
.split('.')
.map((v) => Number(v))

if (
nodeVersionParts[0] < 16 ||
(nodeVersionParts[0] === 16 && nodeVersionParts[1] < 14)
) {
log.warn(
'Node.js 16.14+ is required for Yarn PnP 3.20+. More info: https://github.com/vercel/next.js/pull/34688#issuecomment-1047994505'
)
}
}

// Make sure commands gracefully respect termination signals (e.g. from Docker)
// Allow the graceful termination to be manually configurable
if (!process.env.NEXT_MANUAL_SIG_HANDLE && command !== 'dev') {
Expand Down
2 changes: 1 addition & 1 deletion test/.stats-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"react-dom": "latest"
},
"engines": {
"node": ">=16.14.0",
"node": ">=18.18.2",
"pnpm": "8.9.0"
},
"packageManager": "pnpm@8.9.0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ createNextDescribe(

await check(() => {
return browser.eval('window.location.pathname + window.location.search')
}, '/header?name=test&constructor=FormData&hidden-info=hi')
}, '/header?name=test&constructor=_FormData&hidden-info=hi')
})

it('should support actions from client without JS', async () => {
Expand All @@ -39,7 +39,7 @@ createNextDescribe(

await check(() => {
return browser.eval('window.location.pathname + window.location.search')
}, '/header?name=test&constructor=FormData&hidden-info=hi')
}, '/header?name=test&constructor=_FormData&hidden-info=hi')
})
}
)
2 changes: 1 addition & 1 deletion test/e2e/app-dir/actions/app-action.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ createNextDescribe(

await check(() => {
return browser.eval('window.location.pathname + window.location.search')
}, '/header?name=test&constructor=FormData&hidden-info=hi')
}, '/header?name=test&constructor=_FormData&hidden-info=hi')
})

it('should support .bind', async () => {
Expand Down
18 changes: 7 additions & 11 deletions test/e2e/edge-compiler-can-import-blob-assets/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@ import path from 'path'
import { promises as fs } from 'fs'
import { readJson } from 'fs-extra'

describe('Edge Compiler can import asset assets', () => {
// TODO: `node-fetch` hangs on some of these tests in Node.js.
// Re-enable when `node-fetch` is dropped.
// See: https://github.com/vercel/next.js/pull/55112
describe.skip('Edge Compiler can import asset assets', () => {
let next: NextInstance

// TODO: remove after this is supported for deploy
Expand All @@ -29,16 +32,9 @@ describe('Edge Compiler can import asset assets', () => {
})

it('allows to fetch a remote URL with a path and basename', async () => {
const response = await fetchViaHTTP(
next.url,
'/api/edge',
{
handler: 'remote-with-base',
},
{
compress: true,
}
)
const response = await fetchViaHTTP(next.url, '/api/edge', {
handler: 'remote-with-base',
})
expect(await response.text()).toContain('Example Domain')
})

Expand Down
Loading