Skip to content

Commit 30c5896

Browse files
committed
chore: upgrade dependencies and add playwright checks
1 parent 3b86fec commit 30c5896

File tree

13 files changed

+2711
-2984
lines changed

13 files changed

+2711
-2984
lines changed

.github/workflows/webpack.yml

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: NodeJS with Webpack
1+
name: CI
22

33
on:
44
push:
@@ -10,23 +10,34 @@ jobs:
1010
build:
1111
runs-on: ubuntu-latest
1212

13-
strategy:
14-
matrix:
15-
node-version: [22.x]
16-
1713
steps:
1814
- uses: actions/checkout@v6
1915

20-
- name: Use Node.js ${{ matrix.node-version }}
16+
- name: Use Node.js 24.x
2117
uses: actions/setup-node@v6
2218
with:
23-
node-version: ${{ matrix.node-version }}
24-
- name: Use Pnpm v10.18.0
19+
node-version: 24.x
20+
cache: pnpm
21+
22+
- name: Use pnpm 10.18.3
2523
uses: pnpm/action-setup@v2
2624
with:
27-
version: 10.18.0
25+
version: 10.18.3
26+
27+
- name: Install dependencies
28+
run: pnpm install --frozen-lockfile
29+
30+
- name: Install Playwright browser
31+
run: pnpm exec playwright install --with-deps chromium
32+
33+
- name: Lint
34+
run: pnpm lint
35+
36+
- name: Typecheck
37+
run: pnpm typecheck
2838

2939
- name: Build
30-
run: |
31-
pnpm install
32-
pnpm build
40+
run: pnpm build
41+
42+
- name: End-to-end tests
43+
run: pnpm test:e2e

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
node_modules
22
dist
33
.idea
4+
.DS_Store
5+
playwright-report
6+
test-results

.swcrc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77
},
88
"transform": {
99
"react": {
10-
"pragma": "React.createElement",
11-
"pragmaFrag": "React.Fragment"
10+
"runtime": "automatic"
1211
}
1312
}
1413
}
15-
}
14+
}

eslint.config.mjs

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,47 @@
11
import globals from "globals";
22
import pluginJs from "@eslint/js";
33
import tseslint from "typescript-eslint";
4-
import pluginReact from "eslint-plugin-react";
5-
import reactCompiler from 'eslint-plugin-react-compiler'
4+
import reactPlugin from "@eslint-react/eslint-plugin";
5+
import reactCompiler from "eslint-plugin-react-compiler";
66

77
/** @type {import('eslint').Linter.Config[]} */
88
export default [
9-
{ files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] },
10-
{ languageOptions: { globals: globals.browser } },
9+
{
10+
ignores: ["dist/**", "node_modules/**", "playwright-report/**", "test-results/**"],
11+
},
1112
pluginJs.configs.recommended,
1213
...tseslint.configs.recommended,
13-
pluginReact.configs.flat.recommended,
1414
{
15+
files: ["src/**/*.{js,jsx,ts,tsx}"],
16+
languageOptions: { globals: globals.browser },
17+
},
18+
{
19+
files: [
20+
"*.config.{js,cjs,mjs,ts}",
21+
"webpack*.js",
22+
"postcss.config.js",
23+
],
24+
languageOptions: { globals: globals.node },
25+
rules: {
26+
"@typescript-eslint/no-require-imports": "off",
27+
},
28+
},
29+
{
30+
files: ["playwright.config.ts", "tests/**/*.{js,ts}"],
31+
languageOptions: { globals: globals.node },
32+
},
33+
{
34+
...reactPlugin.configs["recommended-typescript"],
35+
files: ["src/**/*.{jsx,tsx}"],
36+
},
37+
{
38+
files: ["src/**/*.{jsx,tsx}"],
1539
plugins: {
16-
'react-compiler': reactCompiler,
40+
"react-compiler": reactCompiler,
1741
},
1842
rules: {
19-
'react-compiler/react-compiler': 'error',
43+
"@typescript-eslint/no-unused-vars": ["error", { varsIgnorePattern: "^React$" }],
44+
"react-compiler/react-compiler": "error",
2045
},
2146
},
2247
];

package.json

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@
1212
],
1313
"scripts": {
1414
"dev": "webpack serve --config webpack.dev.js --hot",
15-
"build": "webpack --config webpack.prod.js"
15+
"build": "webpack --config webpack.prod.js",
16+
"lint": "eslint . --max-warnings=0",
17+
"typecheck": "tsc --noEmit",
18+
"test:e2e": "playwright test",
19+
"test:e2e:headed": "playwright test --headed"
1620
},
1721
"repository": {
1822
"type": "git",
@@ -25,62 +29,68 @@
2529
"url": "https://github.com/jacob-lcs/react-webpack5-template/issues"
2630
},
2731
"homepage": "https://github.com/jacob-lcs/react-webpack5-template#readme",
32+
"browserslist": [
33+
"last 2 versions",
34+
"> 1%",
35+
"ios >= 7"
36+
],
2837
"dependencies": {
29-
"antd": "^6.1.4",
30-
"dayjs": "^1.11.19",
31-
"lodash-es": "^4.17.22",
32-
"react": "^19.2.3",
33-
"react-dom": "^19.2.3"
38+
"antd": "^6.3.2",
39+
"dayjs": "^1.11.20",
40+
"lodash-es": "^4.17.23",
41+
"react": "^19.2.4",
42+
"react-dom": "^19.2.4"
3443
},
3544
"devDependencies": {
36-
"@eslint/js": "^9.39.2",
45+
"@eslint-react/eslint-plugin": "^2.13.0",
46+
"@eslint/js": "^10.0.1",
47+
"@playwright/test": "^1.58.2",
3748
"@pmmmwh/react-refresh-webpack-plugin": "^0.6.2",
38-
"@swc/core": "^1.15.8",
49+
"@swc/core": "^1.15.18",
3950
"@types/lodash-es": "^4.17.12",
40-
"@types/node": "^25.0.3",
41-
"@types/react": "^19.2.7",
51+
"@types/node": "^25.5.0",
52+
"@types/react": "^19.2.14",
4253
"@types/react-dom": "^19.2.3",
43-
"autoprefixer": "^10.4.23",
54+
"autoprefixer": "^10.4.27",
4455
"browserslist": "^4.28.1",
45-
"css-loader": "^7.1.2",
46-
"css-minimizer-webpack-plugin": "^7.0.4",
47-
"dotenv-webpack": "^8.1.1",
48-
"eslint": "^9.39.2",
49-
"eslint-plugin-react": "^7.37.5",
56+
"css-loader": "^7.1.4",
57+
"css-minimizer-webpack-plugin": "^8.0.0",
58+
"dotenv-webpack": "^9.0.0",
59+
"eslint": "^10.0.3",
5060
"eslint-plugin-react-compiler": "19.1.0-rc.2",
51-
"globals": "^17.0.0",
52-
"html-webpack-plugin": "^5.6.5",
53-
"less": "^4.5.1",
54-
"less-loader": "^12.3.0",
55-
"lightningcss": "^1.30.2",
56-
"mini-css-extract-plugin": "^2.9.4",
57-
"path": "^0.12.7",
58-
"postcss": "^8.5.6",
59-
"postcss-loader": "^8.2.0",
61+
"globals": "^17.4.0",
62+
"html-webpack-plugin": "^5.6.6",
63+
"less": "^4.6.4",
64+
"less-loader": "^12.3.2",
65+
"lightningcss": "^1.32.0",
66+
"mini-css-extract-plugin": "^2.10.1",
67+
"postcss": "^8.5.8",
68+
"postcss-loader": "^8.2.1",
6069
"postcss-normalize": "^13.0.1",
61-
"postcss-preset-env": "^10.6.0",
70+
"postcss-preset-env": "^11.2.0",
6271
"react-compiler-webpack": "^1.0.0",
6372
"react-refresh": "^0.18.0",
6473
"resolve-url-loader": "^5.0.0",
65-
"sass": "^1.97.1",
66-
"sass-loader": "^16.0.6",
74+
"sass": "^1.98.0",
75+
"sass-loader": "^16.0.7",
6776
"style-loader": "^4.0.0",
6877
"stylus": "^0.64.0",
69-
"stylus-loader": "^8.1.2",
70-
"swc-loader": "^0.2.6",
71-
"terser-webpack-plugin": "^5.3.16",
78+
"stylus-loader": "^8.1.3",
79+
"swc-loader": "^0.2.7",
80+
"terser-webpack-plugin": "^5.4.0",
7281
"thread-loader": "^4.0.4",
7382
"typescript": "^5.9.3",
74-
"typescript-eslint": "^8.51.0",
75-
"webpack": "^5.104.1",
76-
"webpack-bundle-analyzer": "^5.1.0",
77-
"webpack-cli": "^6.0.1",
78-
"webpack-dev-server": "^5.2.2",
83+
"typescript-eslint": "^8.57.0",
84+
"webpack": "^5.105.4",
85+
"webpack-bundle-analyzer": "^5.2.0",
86+
"webpack-cli": "^7.0.0",
87+
"webpack-dev-server": "^5.2.3",
7988
"webpack-manifest-plugin": "^6.0.1",
8089
"webpack-merge": "^6.0.1",
8190
"webpackbar": "^7.0.0"
8291
},
8392
"engines": {
8493
"pnpm": "^10.0.0"
85-
}
94+
},
95+
"packageManager": "pnpm@10.32.1"
8696
}

playwright.config.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { defineConfig, devices } from "@playwright/test";
2+
3+
const playwrightPort = 45173;
4+
const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://127.0.0.1:${playwrightPort}`;
5+
6+
export default defineConfig({
7+
testDir: "./tests",
8+
fullyParallel: false,
9+
retries: process.env.CI ? 2 : 0,
10+
reporter: [["list"], ["html", { open: "never" }]],
11+
use: {
12+
baseURL,
13+
trace: "on-first-retry",
14+
screenshot: "only-on-failure",
15+
video: "retain-on-failure",
16+
},
17+
projects: [
18+
{
19+
name: "chromium",
20+
use: { ...devices["Desktop Chrome"] },
21+
},
22+
],
23+
webServer: process.env.PLAYWRIGHT_BASE_URL
24+
? undefined
25+
: {
26+
command: `./node_modules/.bin/webpack serve --config webpack.dev.js --hot --host 127.0.0.1 --port ${playwrightPort}`,
27+
url: `http://127.0.0.1:${playwrightPort}`,
28+
reuseExistingServer: !process.env.CI,
29+
timeout: 120_000,
30+
},
31+
});

0 commit comments

Comments
 (0)