diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index d470ea7..ae59c35 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -31,7 +31,10 @@ jobs: run: npm ci - name: Build - run: npm run build -- --define=$VERSION + env: + AppVersion: ${{ github.ref_name }} + SimApiVersion: ${{ github.ref_name }} + run: npm run build - name: Publish to npm run: npm publish --access public \ No newline at end of file diff --git a/AICONTEXT.md b/AICONTEXT.md index 0cc03ca..b5fecd9 100644 --- a/AICONTEXT.md +++ b/AICONTEXT.md @@ -54,7 +54,7 @@ SimApiBusinessCallback // { [code]: (data) => void },支持数字码或 'co - 改 Token 存储:替换 `localStorage` 为 `sessionStorage` 或内存变量,修改 `getToken()`/`setToken()`/`removeToken()` - 改登录/登出逻辑:修改 `login()`/`logout()` 方法 - 改超时处理:修改 `fetchWithTimeout()` 函数 -- 版本管理:版本号在库构建时通过 `scripts/replace-version.js` 注入,源码中使用占位符 `0.0.0-version-placeholder` +- **版本管理**:版本号通过 `declare const` 声明常量,构建时通过 Vite 的 `define` 注入。未指定时默认为 `0.0.0-dev` **autoInit 设计约束**: @@ -104,11 +104,34 @@ npm run build → vite build vite.core.config.ts 输出 dist/index.mjs / index.cjs → vite build vite.pinia.config.ts 输出 dist/pinia.mjs → tsc -p tsconfig.build.json 输出 *.d.ts 类型声明 +``` -npm run build:version - → node scripts/replace-version.js 替换版本占位符 - → npm run build 构建 - → node scripts/restore-version.js 恢复占位符 +**版本号注入:** + +版本号通过 `vite.core.config.ts` 的 `define` 配置注入,从环境变量读取: + +```typescript +define: { + 'AppVersion': JSON.stringify(process.env.AppVersion || process.env.npm_config_AppVersion || '0.0.0-develop'), + 'SimApiVersion': JSON.stringify(process.env.SimApiVersion || process.env.npm_config_SimApiVersion || '0.0.0-develop'), +} +``` + +**本地构建示例:** +```bash +# Windows PowerShell +$env:AppVersion="1.0.0"; $env:SimApiVersion="1.0.0"; npm run build + +# Linux/Mac +AppVersion=1.0.0 SimApiVersion=1.0.0 npm run build +``` + +**GitHub Actions 自动发布:** +```yaml +env: + AppVersion: ${{ github.ref_name }} + SimApiVersion: ${{ github.ref_name }} +run: npm run build ``` **dist 输出是平铺的**,core 和 pinia 的编译产物全部在同一目录: @@ -142,4 +165,4 @@ dist/ - **无 Cookie**:所有请求不发送 Cookie,Token 通过请求头传递 - **零依赖**:不需要安装 axios,使用原生 fetch - 删除了 Angular 支持,如需恢复参考 git 历史 -- 版本号通过构建脚本注入,GitHub Actions 发布时会自动替换 `0.0.0-version-placeholder` 占位符 +- **版本号管理**:使用 `declare const` + Vite `define` 注入,不再需要 sed 替换脚本 diff --git a/README.md b/README.md index 89b3135..e7ed164 100644 --- a/README.md +++ b/README.md @@ -332,6 +332,28 @@ npm run build npm link # 本地调试 ``` +### 版本号注入 + +库使用 `declare const` 声明版本常量,构建时通过 Vite 的 `define` 注入版本号: + +**本地构建:** +```bash +# Windows PowerShell +$env:AppVersion="1.0.0"; $env:SimApiVersion="1.0.0"; npm run build + +# Linux/Mac +AppVersion=1.0.0 SimApiVersion=1.0.0 npm run build +``` + +**CI/CD 构建版本号:** +```bash +env: + AppVersion: ${VERSION} + SimApiVersion: ${VERSION} +``` + +如果未指定环境变量,版本号默认为 `0.0.0-develop`。 + --- ## 从旧版迁移 diff --git a/package.json b/package.json index 8e4f7fb..9148b3f 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,6 @@ "build": "npm run build:core && npm run build:pinia && npm run types", "build:core": "vite build --config vite.core.config.ts", "build:pinia": "vite build --config vite.pinia.config.ts", - "build:version": "node scripts/replace-version.js && npm run build && node scripts/restore-version.js", "dev": "vite build --config vite.core.config.ts --watch", "types": "tsc --declaration --emitDeclarationOnly --project tsconfig.build.json", "lint": "tsc --noEmit" diff --git a/src/simapi.core.ts b/src/simapi.core.ts index fb6061a..36707fe 100644 --- a/src/simapi.core.ts +++ b/src/simapi.core.ts @@ -11,8 +11,6 @@ */ import { - AppVersion, - SimApiVersion, type SimApiVersions, type SimApiAuthConfig, type SimApiApiConfig, @@ -20,7 +18,6 @@ import { type SimApiBaseResponse, } from './types' -export { SimApiVersion, AppVersion } from './types' export type { SimApiVersions, SimApiAuthConfig, @@ -29,6 +26,8 @@ export type { SimApiBaseResponse, } from './types' +declare const AppVersion: string; +declare const SimApiVersion: string; // ── Helper: Fetch with Timeout ──────────────────────────────────────── function fetchWithTimeout( @@ -120,9 +119,6 @@ export class SimApiCore { if (config.debug !== undefined) { this.debug = config.debug } - if (config.uiAppVersion !== undefined) { - this.uiAppVersion = config.uiAppVersion - } if (config.endpoints) { this.api.endpoints = { ...this.api.endpoints, ...config.endpoints } } @@ -135,9 +131,6 @@ export class SimApiCore { if (options.debug !== undefined) { this.debug = options.debug } - if (options.uiAppVersion !== undefined) { - this.uiAppVersion = options.uiAppVersion - } if (options.auth) { this.auth = { ...this.auth, ...options.auth } } diff --git a/src/types.ts b/src/types.ts index 7fa42f0..c3e7cda 100644 --- a/src/types.ts +++ b/src/types.ts @@ -2,10 +2,6 @@ * SimApi 类型定义 */ -// 版本号占位符,构建时由 GitHub Action 替换 -export const SimApiVersion = '0.0.0-version-placeholder' -export const AppVersion = '0.0.0-version-placeholder' - /** 版本信息 */ export interface SimApiVersions { uiApp: string @@ -56,7 +52,7 @@ export interface SimApiApiConfig { /** SimApi 完整配置 */ export interface SimApiOptions { debug?: boolean - /** UI 应用版本,如果不指定则使用库内置的占位符版本 */ + /** UI 应用版本,如果不指定则使用库内置的版本号 */ uiAppVersion?: string auth?: Partial api?: Partial diff --git a/vite.core.config.ts b/vite.core.config.ts index 0e0b407..93b98c7 100644 --- a/vite.core.config.ts +++ b/vite.core.config.ts @@ -1,6 +1,6 @@ import { defineConfig } from 'vite' -export default defineConfig({ +export default defineConfig(({ mode }) => ({ build: { outDir: 'dist', emptyOutDir: true, @@ -13,5 +13,13 @@ export default defineConfig({ rollupOptions: { // 不再需要 external,使用原生 fetch } + }, + define: { + // 版本号从环境变量读取,构建时传入: + // npm run build:core -- --AppVersion=1.2.3 --SimApiVersion=2.3.4 + // 或: + // AppVersion=1.2.3 SimApiVersion=2.3.4 npm run build:core + 'AppVersion': JSON.stringify(process.env.AppVersion || process.env.npm_config_AppVersion || '0.0.0-develop'), + 'SimApiVersion': JSON.stringify(process.env.SimApiVersion || process.env.npm_config_SimApiVersion || '0.0.0-develop'), } -}) +}))