4.5 KiB
4.5 KiB
g3soft-erp
G3Soft ERP 前后端同仓。业务域:海运 / 空运 / 箱管 / 财务 / CRM。
当前状态:前端骨架已搭好并可运行;后端尚未开始。 元数据驱动引擎(通用查询 / 保存 / 权限)未开始设计,属后续独立立项。
目录结构
g3soft-erp/
├── pnpm-workspace.yaml # 仓库唯一配置文件:overrides + allowBuilds
├── web/ # 前端应用(前端唯一的 package.json 在这里)
│ ├── package.json
│ ├── vite.config.ts
│ ├── vitest.config.ts
│ ├── tsconfig.json
│ ├── .oxlintrc.json
│ ├── .oxfmtrc.json
│ └── src/
├── server/ # 后端占位(Maven + Spring Boot,未开始)
├── docs/ # 设计文档
└── README.md
根目录刻意不放 package.json —— 前端可交付物只有 web/ 一个包,那个 package.json 就是 web/package.json。根目录只有 pnpm-workspace.yaml 一个配置文件。
环境要求
- Node.js >= 20.19
- pnpm 11
g3soft-libs需与g3soft-erp平级(同在D:\workspace\code\下),因为overrides用相对路径 link 组件库
快速开始
# 1) 先构建组件库(@g3soft/ui 的 exports 指向 dist,必须先有产物)
cd ../g3soft-libs && pnpm --filter @g3soft/tokens build && pnpm --filter @g3soft/ui build
# 2) 回到本项目
cd ../g3soft-erp/web
pnpm install
pnpm dev # http://localhost:5090
命令都在
web/下跑,根目录没有package.json,所以根目录敲不了pnpm dev。
脚本(在 web/ 下执行)
| 命令 | 说明 |
|---|---|
pnpm dev |
开发服务器(端口 5090,/api 代理到 8088) |
pnpm build |
类型检查 + 生产构建 |
pnpm typecheck |
仅 vue-tsc --noEmit |
pnpm test |
Vitest |
pnpm lint / pnpm fmt |
oxlint / oxfmt |
pnpm check |
lint + fmt:check + build(提交前跑这个) |
@g3soft/ui 接入方式
组件库的 exports 指向 dist/,所以改完组件库必须重新 build。
开发期通过 pnpm-workspace.yaml 的 overrides 指向本地包:
overrides:
'@g3soft/tokens': link:../g3soft-libs/packages/tokens
'@g3soft/ui': link:../g3soft-libs/packages/ui
三个注意点:
overrides只在 workspace 根生效,写在web/package.json里无效。vite.config.ts必须保留dedupe: ['vue', ...]。link 进来的包会带自己的 Vue 副本,不去重会导致组件内响应式失效(组件内部 ref 变化不触发外部渲染)——link 方案最经典的坑。- CI / 其他机器:相对路径依赖目录层级。私库就绪后应把开发期
link:换成私库版本号。
想要组件库热更新?
link: 指向已构建的 dist/,改源码不会即时生效。若要像 g3soft-libs/docs 那样直连源码,在 vite.config.ts 里加 alias:
resolve: {
alias: {
'@g3soft/ui': fileURLToPath(new URL('../../g3soft-libs/packages/ui/src/index.ts', import.meta.url)),
},
}
环境变量
| 变量 | 默认值 | 说明 |
|---|---|---|
VITE_PROXY_TARGET |
http://127.0.0.1:8088 |
开发环境 /api 代理目标 |
VITE_API_BASE |
/api |
接口基础路径 |
VITE_APP_TITLE |
G3Soft ERP |
应用标题 |
将来加 H5 端
@g3soft/ui 只给 web 用,H5 不用。 所以两端是基本独立的应用,只是碰巧同仓,不需要抽任何共享层。
加 H5 时的步骤:
- 建
h5/目录(与web/平级),它有自己的package.json pnpm-workspace.yaml的packages改为['web', 'h5']- 若 H5 也要用某个 g3soft 包,在
overrides里加一条;不用就不用加 - 各端独立构建、独立部署
仓库纪律(重要)
前后端同仓,但必须各自独立:
- 独立构建 —— 前端
pnpm build不管后端,后端mvn package不管前端,任何一方都不触发另一方构建(不要引入frontend-maven-plugin这类东西)。 - 独立版本 —— tag 分开打(
web-v1.2.0/api-v1.2.0)。 - 唯一契约是 HTTP 接口 —— 前端不读后端源码,后端不管前端怎么调;契约写进
docs/。
破坏这三条,同仓的好处立刻变成耦合的代价。
相关仓库
g3soft-libs——@g3soft/ui(组件库)、@g3soft/tokens(设计变量)。web 端 UI 一律用组件库,不另起一套。