Commit 6371aee1 by DaiJiezhang

chore(frontend): adopt pnpm and NestJS default

- Pin Node 22.12.0 and pnpm 12.3.4 for reproducible installs.\n- Keep Java 7690 available through pnpm dev:java for contract comparison.
parent c3cd3541
...@@ -29,6 +29,9 @@ backend/.mvn/jvm.config ...@@ -29,6 +29,9 @@ backend/.mvn/jvm.config
# Local configuration, IDE state, and generated browser-test artifacts. # Local configuration, IDE state, and generated browser-test artifacts.
.env .env
# 前端本机后端地址覆盖:只属于个人环境。.env.java 是团队共享的对拍配置,仍进仓库。
.env.local
frontend/.env.local
.idea/ .idea/
.vite/ .vite/
frontend/.playwright-cli/ frontend/.playwright-cli/
...@@ -47,6 +50,7 @@ db-seed/ ...@@ -47,6 +50,7 @@ db-seed/
# 契约快照含测试库真实业务数据(姓名、手机号),默认不进仓库。 # 契约快照含测试库真实业务数据(姓名、手机号),默认不进仓库。
# 需要团队共享基准时,改为只提交 error.* 这类不含个人信息的快照。 # 需要团队共享基准时,改为只提交 error.* 这类不含个人信息的快照。
scripts/contract/snapshots/ scripts/contract/snapshots/
scripts/contract/snapshots-backup-*/
# Office 打开文档时生成的锁文件,不进仓库。 # Office 打开文档时生成的锁文件,不进仓库。
~$* ~$*
......
...@@ -65,27 +65,31 @@ node -e "console.log(require('crypto').randomBytes(48).toString('hex'))" ...@@ -65,27 +65,31 @@ node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"
### 前端 ### 前端
前端包管理器固定为 pnpm,版本由 `frontend/package.json``packageManager``volta` 字段约束。请勿在 `frontend/` 混用 npm,否则会生成冲突的 `package-lock.json` 与不同结构的 `node_modules`
```bash ```bash
cd frontend cd frontend
npm install pnpm install
npm run dev pnpm dev
``` ```
访问 `http://localhost:5173/asset/`默认连 Java 后端(7690)。 访问 `http://localhost:5173/asset/`**默认连 NestJS 后端(7691)。**
连 NestJS 后端时加环境变量 回退到 Java 后端(7690)对拍
```bash ```bash
VITE_API_TARGET=http://127.0.0.1:7691 npm run dev pnpm dev:java
``` ```
PowerShell 后端地址不写在命令里,由文件管理
```bash | 位置 | 作用 | 是否进仓库 |
$env:VITE_API_TARGET="http://127.0.0.1:7691"; npm run dev |---|---|---|
``` | `vite.config.js` 默认值 | NestJS `7691``pnpm dev` 用它 | 是 |
| `frontend/.env.java` | Java `7690``pnpm dev:java` 用它 | 是 |
| `frontend/.env.local` | 本机临时覆盖,改一行即生效 | 否 |
关掉终端重开即恢复默认,随时可与 Java 对照 优先级:命令行环境变量 > `.env` 文件 > `vite.config.js` 默认值
### NestJS 后端(7691) ### NestJS 后端(7691)
...@@ -120,7 +124,7 @@ mvn -DskipTests spring-boot:run ...@@ -120,7 +124,7 @@ mvn -DskipTests spring-boot:run
```bash ```bash
cd backend-nest && npm test # NestJS 单元测试 cd backend-nest && npm test # NestJS 单元测试
cd backend && mvn test # Java 单元测试(迁移期基准) cd backend && mvn test # Java 单元测试(迁移期基准)
cd frontend && npm run test:e2e # 端到端测试 cd frontend && pnpm test:e2e # 端到端测试
``` ```
## 契约比对 ## 契约比对
......
# 文件用途(白话):迁移期回退到 Java 后端对拍时用的后端地址,由 `pnpm dev:java` 通过 --mode java 加载。
# 默认(pnpm dev)连 NestJS 7691,见 vite.config.js
VITE_API_TARGET=http://127.0.0.1:7690
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "vite --host 0.0.0.0", "dev": "vite --host 0.0.0.0",
"dev:java": "vite --host 0.0.0.0 --mode java",
"build": "vite build", "build": "vite build",
"preview": "vite preview", "preview": "vite preview",
"test:e2e": "playwright test" "test:e2e": "playwright test"
...@@ -10,6 +11,11 @@ ...@@ -10,6 +11,11 @@
"engines": { "engines": {
"node": ">=20.19.0 || >=22.12.0" "node": ">=20.19.0 || >=22.12.0"
}, },
"packageManager": "pnpm@12.3.4",
"volta": {
"node": "22.12.0",
"pnpm": "12.3.4"
},
"dependencies": { "dependencies": {
"element-plus": "^2.14.2", "element-plus": "^2.14.2",
"vue": "^3.5.39", "vue": "^3.5.39",
......
...@@ -3,5 +3,5 @@ import { defineConfig } from '@playwright/test'; ...@@ -3,5 +3,5 @@ import { defineConfig } from '@playwright/test';
export default defineConfig({ export default defineConfig({
testDir: './tests', testDir: './tests',
use: { baseURL: 'http://127.0.0.1:5173', browserName: 'chromium' }, use: { baseURL: 'http://127.0.0.1:5173', browserName: 'chromium' },
webServer: { command: 'npm run dev -- --host 127.0.0.1', url: 'http://127.0.0.1:5173/', reuseExistingServer: true, timeout: 30_000 } webServer: { command: 'pnpm dev -- --host 127.0.0.1', url: 'http://127.0.0.1:5173/', reuseExistingServer: true, timeout: 30_000 }
}); });
...@@ -4,5 +4,5 @@ import { defineConfig } from '@playwright/test'; ...@@ -4,5 +4,5 @@ import { defineConfig } from '@playwright/test';
export default defineConfig({ export default defineConfig({
testDir: './tests', testDir: './tests',
use: { baseURL: 'http://127.0.0.1:5174', browserName: 'chromium' }, use: { baseURL: 'http://127.0.0.1:5174', browserName: 'chromium' },
webServer: { command: 'npm run dev -- --host 127.0.0.1 --port 5174', url: 'http://127.0.0.1:5174/', reuseExistingServer: false, timeout: 30_000 } webServer: { command: 'pnpm dev -- --host 127.0.0.1 --port 5174', url: 'http://127.0.0.1:5174/', reuseExistingServer: false, timeout: 30_000 }
}); });
# esbuild 是 Vite 的底层打包器,其安装脚本负责下载平台二进制文件。
# 不放行会导致 pnpm install 以 ERR_PNPM_IGNORED_BUILDS 非零退出。
allowBuilds:
esbuild: true
import { defineConfig } from 'vite'; import { defineConfig, loadEnv } from 'vite';
/** /**
* 代码作用(白话):把前端固定部署在 /asset/ 前缀下,并把浏览器的 /api 请求转发给本机后端,避免接口请求被 Vite 回退成 HTML 页面。 * 代码作用(白话):把前端固定部署在 /asset/ 前缀下,并把浏览器的 /api 请求转发给本机后端,避免接口请求被 Vite 回退成 HTML 页面。
* 关联文件:frontend/src/router/index.js、frontend/src/modules/phone/phone-api-client.js、backend/src/main/resources/application.yml * 关联文件:frontend/.env.java、frontend/src/router/index.js、frontend/src/modules/phone/phone-api-client.js、backend-nest/src/main.ts
* 关联逻辑(调用链/消息链/数据流):/asset/#/phone-assets -> Vue Hash 路由;/api/phone-assets -> Vite proxy -> 127.0.0.1:7690 后端接口。 * 关联逻辑(调用链/消息链/数据流):/asset/#/phone-assets -> Vue Hash 路由;/api/phone-assets -> Vite proxy -> 127.0.0.1:7691 NestJS 接口。
*/ */
export default defineConfig({ export default defineConfig(({ mode }) => {
// 后端地址优先级:命令行环境变量 > .env 文件 > 默认值。
// 默认连 NestJS(7691);`pnpm dev:java` 走 --mode java 读 .env.java,回退到 Java(7690) 对拍。
const fileEnv = loadEnv(mode, process.cwd(), 'VITE_');
const apiTarget = process.env.VITE_API_TARGET || fileEnv.VITE_API_TARGET || 'http://127.0.0.1:7691';
return {
base: '/asset/', base: '/asset/',
define: { define: {
__VUE_OPTIONS_API__: true, __VUE_OPTIONS_API__: true,
...@@ -17,12 +23,11 @@ export default defineConfig({ ...@@ -17,12 +23,11 @@ export default defineConfig({
strictPort: true, strictPort: true,
proxy: { proxy: {
'/api': { '/api': {
// 迁移期用环境变量切换后端:不设时连 Java(7690),设 VITE_API_TARGET 可指向 NestJS(7691)。 target: apiTarget,
// 这样验证新后端不需要改任何代码,切换与回退都是一条命令的事。
target: process.env.VITE_API_TARGET || 'http://127.0.0.1:7690',
changeOrigin: true changeOrigin: true
} }
} }
}, },
preview: { port: 4173, strictPort: true } preview: { port: 4173, strictPort: true }
};
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment