Skip to content

Commit f8015fd

Browse files
committed
feat!: require Node 24 and migrate CJS to ESM output
BREAKING CHANGE: Node 24+ is now required. All packages emit ESM. - Add "type": "module" to all package.json files - Update exports to use single "default" condition (remove CJS/ESM dual exports) - Update engines to require Node >=24.0.0 - Delete all index.mjs shim files (34 files) - Fix CJS interop issues across source files: - require.resolve → import.meta.resolve / createRequire - __dirname → import.meta.dirname - Default import interop for CJS packages (rollup plugins, saucelabs, etc.) - Add .nvmrc (v24.11.1) - Add changeset for breaking node version requirement Assisted-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 010ef78 commit f8015fd

90 files changed

Lines changed: 343 additions & 711 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
---
2+
"@web/browser-logs": major
3+
"@web/config-loader": major
4+
"@web/dev-server": major
5+
"@web/dev-server-core": major
6+
"@web/dev-server-esbuild": major
7+
"@web/dev-server-hmr": major
8+
"@web/dev-server-import-maps": major
9+
"@web/dev-server-legacy": major
10+
"@web/dev-server-polyfill": major
11+
"@web/dev-server-rollup": major
12+
"@web/dev-server-storybook": major
13+
"@web/mocks": major
14+
"@web/parse5-utils": major
15+
"@web/polyfills-loader": major
16+
"@web/rollup-plugin-copy": major
17+
"@web/rollup-plugin-html": major
18+
"@web/rollup-plugin-import-meta-assets": major
19+
"@web/rollup-plugin-polyfills-loader": major
20+
"@web/rollup-plugin-workbox": major
21+
"@web/storybook-builder": major
22+
"@web/storybook-framework-web-components": major
23+
"@web/storybook-utils": major
24+
"@web/test-runner": major
25+
"@web/test-runner-browserstack": major
26+
"@web/test-runner-chrome": major
27+
"@web/test-runner-cli": major
28+
"@web/test-runner-commands": major
29+
"@web/test-runner-core": major
30+
"@web/test-runner-coverage-v8": major
31+
"@web/test-runner-junit-reporter": major
32+
"@web/test-runner-mocha": major
33+
"@web/test-runner-module-mocking": major
34+
"@web/test-runner-playwright": major
35+
"@web/test-runner-puppeteer": major
36+
"@web/test-runner-saucelabs": major
37+
"@web/test-runner-selenium": major
38+
"@web/test-runner-visual-regression": major
39+
"@web/test-runner-webdriver": major
40+
---
41+
42+
**BREAKING**: Require Node.js 24 LTS (Iron)
43+
44+
Update minimum Node.js version from 18.0.0 to 24.0.0 across all packages. Node.js 18 reached EOL in April 2025
45+
46+
**Migration:**
47+
Update your Node.js version to 24 or later:
48+
```bash
49+
nvm install 24
50+
nvm use 24
51+
```

.nvmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
v24.11.1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"url": "https://github.com/modernweb-dev/web.git"
88
},
99
"engines": {
10-
"node": ">=18.0.0"
10+
"node": ">=24.0.0"
1111
},
1212
"scripts": {
1313
"build": "npm run build:clean && tsc --build",

packages/browser-logs/index.mjs

Lines changed: 0 additions & 6 deletions
This file was deleted.

packages/browser-logs/package.json

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@
1717
"exports": {
1818
".": {
1919
"types": "./index.d.ts",
20-
"import": "./index.mjs",
21-
"require": "./dist/index.js"
20+
"default": "./dist/index.js"
2221
}
2322
},
2423
"engines": {
25-
"node": ">=18.0.0"
24+
"node": ">=24.0.0"
2625
},
2726
"scripts": {
2827
"build": "tsc",
@@ -32,7 +31,6 @@
3231
"files": [
3332
"*.d.ts",
3433
"*.js",
35-
"*.mjs",
3634
"dist",
3735
"src"
3836
],
@@ -52,5 +50,6 @@
5250
"devDependencies": {
5351
"@esm-bundle/chai": "^4.1.5",
5452
"puppeteer": "^24.0.0"
55-
}
53+
},
54+
"type": "module"
5655
}

packages/config-loader/index.mjs

Lines changed: 0 additions & 4 deletions
This file was deleted.

packages/config-loader/package.json

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
"author": "modern-web",
1515
"homepage": "https://github.com/modernweb-dev/web/tree/master/packages/config-loader",
1616
"main": "src/index.js",
17-
"type": "commonjs",
17+
"type": "module",
1818
"engines": {
19-
"node": ">=18.0.0"
19+
"node": ">=24.0.0"
2020
},
2121
"scripts": {
2222
"build": "tsc",
@@ -26,7 +26,6 @@
2626
"files": [
2727
"*.d.ts",
2828
"*.js",
29-
"*.mjs",
3029
"dist",
3130
"src"
3231
],
@@ -42,9 +41,8 @@
4241
"types": "dist/index.d.ts",
4342
"exports": {
4443
".": {
45-
"types": "./index.d.ts",
46-
"import": "./index.mjs",
47-
"require": "./src/index.js"
44+
"types": "./dist/index.d.ts",
45+
"default": "./dist/index.js"
4846
}
4947
}
5048
}

packages/dev-server-core/index.mjs

Lines changed: 0 additions & 34 deletions
This file was deleted.

packages/dev-server-core/package.json

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,19 @@
1717
"exports": {
1818
".": {
1919
"types": "./index.d.ts",
20-
"import": "./index.mjs",
21-
"require": "./dist/index.js"
20+
"default": "./dist/index.js"
2221
},
2322
"./dist/dom5": {
2423
"types": "./dist/dom5/index.d.ts",
25-
"require": "./dist/dom5/index.js"
24+
"default": "./dist/dom5/index.js"
2625
},
2726
"./test-helpers": {
2827
"types": "./test-helpers.d.ts",
29-
"import": "./test-helpers.mjs",
30-
"require": "./dist/test-helpers.js"
28+
"default": "./dist/test-helpers.js"
3129
}
3230
},
3331
"engines": {
34-
"node": ">=18.0.0"
32+
"node": ">=24.0.0"
3533
},
3634
"scripts": {
3735
"build": "tsc",
@@ -46,7 +44,6 @@
4644
".self-signed-dev-server-ssl.cert",
4745
".self-signed-dev-server-ssl.key",
4846
"*.d.ts",
49-
"*.mjs",
5047
"dist",
5148
"src"
5249
],
@@ -58,24 +55,24 @@
5855
"core"
5956
],
6057
"dependencies": {
61-
"@types/koa": "^2.11.6",
62-
"@types/ws": "^7.4.0",
58+
"@types/koa": "^3.0.1",
59+
"@types/ws": "^8.5.13",
6360
"@web/parse5-utils": "^2.1.0",
6461
"chokidar": "^4.0.1",
6562
"clone": "^2.1.2",
6663
"es-module-lexer": "^1.0.0",
6764
"get-stream": "^6.0.0",
6865
"is-stream": "^2.0.0",
6966
"isbinaryfile": "^5.0.0",
70-
"koa": "^2.16.1",
67+
"koa": "^3.1.1",
7168
"koa-etag": "^4.0.0",
7269
"koa-send": "^5.0.1",
7370
"koa-static": "^5.0.0",
7471
"lru-cache": "^8.0.4",
7572
"mime-types": "^2.1.27",
76-
"parse5": "^6.0.1",
73+
"parse5": "^7.0.0 || ^8.0.0",
7774
"picomatch": "^2.2.2",
78-
"ws": "^7.5.10"
75+
"ws": "^8.18.3"
7976
},
8077
"devDependencies": {
8178
"@types/clone": "^2.1.0",
@@ -86,5 +83,6 @@
8683
"express": "^4.21.2",
8784
"nanoid": "^3.1.25",
8885
"portfinder": "^1.0.32"
89-
}
86+
},
87+
"type": "module"
9088
}

packages/dev-server-core/src/server/createServer.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ export function createServer(
6868

6969
let server: Server;
7070
if (cfg.http2) {
71-
const dir = path.join(__dirname, '..');
71+
const dir = path.join(import.meta.dirname, '..');
7272
const options = {
7373
key: fs.readFileSync(
7474
cfg.sslKey

0 commit comments

Comments
 (0)