@udi-organization/udi-package 1.0.76 → 1.0.78

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +189 -349
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,472 +1,312 @@
1
1
  # @udi-organization/udi-package
2
2
 
3
- > 基於 React 的 UI 組件庫,提供 UdiTable、Button 等可重用組件,支持 ESM 和 CommonJS 模組格式
3
+ [![npm version](https://img.shields.io/npm/v/@udi-organization/udi-package)](https://www.npmjs.com/package/@udi-organization/udi-package)
4
4
 
5
- [![npm version](https://img.shields.io/npm/v/@udi-organization/udi-package.svg)](https://www.npmjs.com/package/@udi-organization/udi-package)
6
- [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC)
5
+ UDI 共用元件套件,供各前端專案(client)使用。
7
6
 
8
- ## 📦 套件資訊
9
-
10
- - **套件名稱**: `@udi-organization/udi-package`
11
- - **發布平台**: [npm Registry](https://www.npmjs.com/package/@udi-organization/udi-package)
12
- - **倉庫位置**: [GitLab](https://gitlab.com/udi3732104/udi-package/-/tree/main?ref_type=heads)
13
-
14
- ## 🎯 核心特性
15
-
16
- - **集中管理**: 統一維護跨專案共用的 Component 與 Utils Function
17
- - **提升效率**: 避免重複開發,加速專案迭代
18
- - **自動化發布**: 透過 GitLab CI/CD 實現自動化版本管理與發布
19
- - **雙模式開發**: 支援正常模式與 Link 模式,滿足不同開發場景
20
- - **完整測試**: 使用 Jest 進行單元測試,確保代碼品質
7
+ ---
21
8
 
22
- ## 📋 目錄
9
+ ## 目錄
23
10
 
24
- - [快速開始](#快速開始)
11
+ - [元件使用指南](#元件使用指南)
12
+ - [UdiTable](#uditable)
13
+ - [useUdiTableSync(兩表格同步)](#useuditable sync兩表格同步)
14
+ - [useUdiTableSyncMutipleTable(多表格同步)](#useuditablesyncmutipletable多表格同步)
25
15
  - [專案結構](#專案結構)
26
- - [環境設定](#環境設定)
27
- - [開發模式](#開發模式)
28
- - [測試](#測試)
16
+ - [前置作業](#前置作業)
17
+ - [開發流程](#開發流程)
18
+ - [Link 模式(本地即時開發)](#link-模式本地即時開發)
19
+ - [Release 模式(使用 npm 正式版)](#release-模式使用-npm-正式版)
20
+ - [版本資訊](#版本資訊)
29
21
  - [版本發布](#版本發布)
30
- - [前端專案整合](#前端專案整合)
31
- - [CI/CD 自動化](#cicd-自動化)
32
- - [常見問題](#常見問題)
22
+ - [測試版(Alpha / Beta)](#測試版alpha--beta)
23
+ - [正式版(自動 CI/CD](#正式版自動-cicd)
24
+ - [Pre-push Hook 說明](#pre-push-hook-說明)
25
+ - [CI/CD 設定](#cicd-設定)
26
+ - [npm Automation Token](#npm-automation-token)
27
+ - [GitLab CI/CD Variables](#gitlab-cicd-variables)
33
28
 
34
29
  ---
35
30
 
36
- ## 🚀 快速開始
31
+ ## 元件使用指南
37
32
 
38
- ### 安裝套件
33
+ ### 安裝與引入
39
34
 
40
35
  ```bash
41
- npm install @udi-organization/udi-package --legacy-peer
36
+ npm install @udi-organization/udi-package --legacy-peer-deps
42
37
  ```
43
38
 
44
- ### 使用範例
45
-
46
- ```jsx
47
- import { UdiTable, Button } from '@udi-organization/udi-package';
48
- import { useUdiTableSync } from '@udi-organization/udi-package';
49
-
50
- function MyComponent() {
51
- const tableProps = useUdiTableSync({
52
- /* ... */
53
- });
54
-
55
- return (
56
- <div>
57
- <Button>Click Me</Button>
58
- <UdiTable {...tableProps} />
59
- </div>
60
- );
61
- }
39
+ ```js
40
+ import { UdiTable, useUdiTableSync, useUdiTableSyncMutipleTable } from '@udi-organization/udi-package';
62
41
  ```
63
42
 
64
43
  ---
65
44
 
66
- ## 📁 專案結構
67
-
68
- ```
69
- udi-package/
70
- ├── src/ # 📝 源代碼目錄
71
- │ ├── index.js # 套件入口,導出所有組件
72
- │ ├── Button.jsx # Button 組件
73
- │ ├── lib/ # 工具函數庫
74
- │ │ └── tr.js # 翻譯工具
75
- │ └── udiTable/ # UdiTable 組件模組
76
- │ ├── UdiTable.jsx # 主組件
77
- │ ├── mockFn.js # 測試用 mock 函數
78
- │ └── hooks/ # 自定義 React Hooks
79
- │ ├── useTableSort.js
80
- │ ├── useTablePagination.js
81
- │ ├── useDataRequest.js
82
- │ ├── useUdiTableSync.js
83
- │ └── useUdiTableSyncMutipleTable.js
84
-
85
- ├── dev/ # 🛠️ 本地開發環境
86
- │ ├── index.html # 開發用 HTML 模板
87
- │ └── main.jsx # 開發入口文件
88
-
89
- ├── dist/ # 📦 編譯輸出目錄(自動生成)
90
- │ ├── index.cjs.js # CommonJS 格式
91
- │ ├── index.cjs.js.map
92
- │ ├── index.esm.js # ES Module 格式
93
- │ └── index.esm.js.map
94
-
95
- ├── .husky/ # 🔐 Git Hooks
96
- │ └── pre-push # 自動版本管理 Hook
97
-
98
- ├── rollup.config.js # 📦 套件打包配置
99
- ├── webpack.config.js # 🔧 本地開發服務器配置
100
- ├── jest.config.cjs # 🧪 測試配置
101
- ├── .gitlab-ci.yml # 🚀 GitLab CI/CD 配置
102
- ├── package.json
103
- └── README.md
104
- ```
105
-
106
- ### 架構說明
107
-
108
- #### 編譯工具分工
109
-
110
- | 工具 | 用途 | 輸出 |
111
- |------|------|------|
112
- | **Rollup** | 編譯套件為標準 npm 包格式 | `dist/index.cjs.js`、`dist/index.esm.js` |
113
- | **Webpack** | 提供本地開發環境,支持熱更新 | `dist-dev/bundle.js` (僅開發用) |
114
-
115
- #### 開發模式
116
45
 
117
- 1. **正常開發模式**: 使用 npm 官方發布的套件版本
118
- 2. **Link 開發模式**: 使用本地 udi-package 進行即時開發
119
46
 
120
- #### 工作目錄結構要求
47
+ ## 專案結構
121
48
 
122
49
  ```
123
- workspace/
124
- ├── udi-package/ # 套件專案
125
- ├── imp-frontend/ # 前端專案 A
126
- ├── other-frontend/ # 前端專案 B
127
- └── ...
50
+ udi-package/ ← 套件端(本專案)
51
+ web-frontend/ 客戶端(前端專案)
128
52
  ```
129
53
 
130
- ⚠️ **重要**: `udi-package` 必須與前端專案放在同一層級,因為 Docker volume 映射需要固定路徑 `/udi-package`
54
+ > **重要**:`udi-package` 需與前端專案放在同一層目錄,Docker volume 映射時會依此固定路徑抓取。
131
55
 
132
56
  ---
133
57
 
134
- ## 🔧 環境設定
58
+ ## 前置作業
135
59
 
136
- ### 前置要求
60
+ 1. **加入 npm 開發組織**
61
+ 1. 使用公司 email 建立 npm 帳號:[https://www.npmjs.com](https://www.npmjs.com)
62
+ 2. 請管理員邀請加入組織 `@udi-organization`
63
+ 3. 執行登入並確認身份:
64
+ ```bash
65
+ npm login
66
+ npm whoami
67
+ ```
137
68
 
138
- | 工具 | 版本要求 |
139
- |------|----------|
140
- | Node.js | >= 20.x |
141
- | npm | >= 9.x |
142
- | Git | >= 2.x |
69
+ 2. **設定 CI/CD Token**(團隊中只需一人設定,詳見[下方說明](#cicd-設定))
143
70
 
144
- ```bash
145
- git clone https://gitlab.com/udi3732104/udi-package.git
146
- cd udi-package
147
- ```
71
+ ---
148
72
 
149
- ### 2. 安裝依賴
73
+ ## 開發流程
150
74
 
151
- ```bash
152
- npm install
153
- ```
75
+ ### Link 模式(本地即時開發)
76
+
77
+ 在 `udi-package` 有持續變動時使用,client 端會直接讀取本地 `dist/` 資料夾。
154
78
 
155
- ### 3. 驗證環境
79
+ **套件端(udi-package):**
156
80
 
157
81
  ```bash
158
- # 執行測試
159
- npm test
82
+ # 持續監聽並自動編譯(推薦)
83
+ npm run watch
160
84
 
161
- # 構建套件
85
+ # 或單次編譯
162
86
  npm run build
163
87
  ```
164
88
 
165
- ---
89
+ **客戶端(web-frontend):**
166
90
 
167
- ## 💻 開發模式
91
+ ```bash
92
+ # 切換至 link 模式並啟動開發伺服器
93
+ npm run dev-udi
168
94
 
169
- ### 模式 1:獨立開發套件(推薦用於組件開發)
95
+ # 只切換至 link 模式,不啟動開發伺服器
96
+ npm run dev-udi-o
97
+ ```
170
98
 
171
- 適用於開發新組件或修改現有組件時的獨立測試。
99
+ > `dev-udi` 執行流程:
100
+ > 1. 解除安裝 npm 上的 `@udi-organization/udi-package`
101
+ > 2. 在 `/udi-package` 執行 `sudo npm link`(建立全域連結)
102
+ > 3. 在 `/build` 執行 `npm link @udi-organization/udi-package`(套用本地連結)
103
+ > 4. 啟動 webpack dev server
172
104
 
173
- ```bash
174
- # 啟動本地開發服務器(Webpack)
175
- npm run dev
176
- ```
105
+ > **注意**:link 模式會將 `@udi-organization/udi-package` 從 `package.json` 中移除,改用本地路徑作為依賴。**git push 前必須先切換回 release 模式。**
177
106
 
178
- - 服務器運行於 `http://localhost:3000`
179
- - 支持熱模組替換(HMR)
180
- - 編輯 [dev/main.jsx](dev/main.jsx) 來測試組件
107
+ ---
181
108
 
182
- ### 模式 2:與前端專案聯動開發(使用 npm link)
109
+ ### Release 模式(使用 npm 正式版)
183
110
 
184
- 適用於需要在實際專案中測試套件的情況。
111
+ 套件開發完畢、測試通過後,client 端切換回從 npm 取得套件。
185
112
 
186
- #### 步驟 1:在套件專案中建立鏈接
113
+ **客戶端(web-frontend):**
187
114
 
188
115
  ```bash
189
- cd /path/to/udi-package
116
+ # 安裝最新版並啟動開發伺服器
117
+ npm run get-udi
190
118
 
191
- # 建立全局鏈接
192
- sudo npm link
119
+ # 只安裝最新版,不啟動開發伺服器
120
+ npm run get-udi-o
193
121
 
194
- # 啟動監聽模式(自動編譯變更)
195
- npm run watch
122
+ # 安裝指定版本(測試版或特定版本)
123
+ npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
196
124
  ```
197
125
 
198
- > `npm run watch` 會監聽 [src/](src/) 目錄的變更,並自動使用 Rollup 編譯到 [dist/](dist/)
126
+ ---
199
127
 
200
- #### 步驟 2:在前端專案中使用鏈接
128
+ ## 版本資訊
201
129
 
202
- ```bash
203
- cd /path/to/your-frontend-project
130
+ ### 當前版本
204
131
 
205
- # 移除 npm 安裝的套件
206
- npm uninstall @udi-organization/udi-package --legacy-peer
132
+ `package.json` 查看目前版號:
207
133
 
208
- # 鏈接本地套件
209
- npm link @udi-organization/udi-package --legacy-peer
210
-
211
- # 啟動開發服務器
212
- npm run dev-normal
134
+ ```bash
135
+ node -p "require('./package.json').version"
213
136
  ```
214
137
 
215
- #### 步驟 3:完成開發後恢復正常模式
138
+ 或至 npm 查詢已發布的最新版本:
216
139
 
217
140
  ```bash
218
- # 取消鏈接
219
- npm unlink @udi-organization/udi-package
220
-
221
- # 重新安裝 npm 套件
222
- npm install @udi-organization/udi-package@latest --legacy-peer
141
+ npm view @udi-organization/udi-package version # 最新正式版
142
+ npm view @udi-organization/udi-package dist-tags # 所有 tag(latest / alpha / beta)
143
+ npm view @udi-organization/udi-package versions --json # 完整版本列表
223
144
  ```
224
145
 
225
146
  ---
226
147
 
227
- ## 🧪 測試
228
-
229
- 本專案使用 Jest 進行單元測試,配置詳見 [jest.config.cjs](jest.config.cjs)。
148
+ ### 版號格式(SemVer)
230
149
 
231
- ### 執行測試
232
-
233
- ```bash
234
- # 執行所有測試
235
- npm test
150
+ 本套件遵循 [語意化版本(Semantic Versioning)](https://semver.org/lang/zh-TW/):
236
151
 
237
- # 監聽模式(開發時推薦)
238
- npm run test:watch
239
-
240
- # 生成測試覆蓋率報告
241
- npm run test:coverage
242
152
  ```
153
+ major.minor.patch[-prerelease.N]
243
154
 
244
- ### 測試文件位置
245
-
246
- 測試文件與源文件放在同一目錄,命名規則:`*.test.js`
247
-
248
- ```
249
- src/udiTable/hooks/
250
- ├── useTableSort.js
251
- └── useTableSort.test.js
155
+ 範例:
156
+ 1.0.76 正式版
157
+ 1.0.77-alpha.1 alpha 測試版第 1 次
158
+ 1.0.77-alpha.2 alpha 測試版第 2 次(重複執行 npm run alpha)
159
+ 1.0.77-beta.1 beta 測試版第 1 次
252
160
  ```
253
161
 
254
162
  ---
255
163
 
256
- ## 📦 版本發布
257
-
258
- ### 發布流程概覽
259
-
260
- 本專案支持 **本地手動發布** 和 **GitLab CI/CD 自動發布** 兩種方式。
261
-
262
- ### 方式 1:GitLab CI/CD 自動發布(推薦)
263
-
264
- #### 自動發布觸發條件
265
-
266
- 當你 push 到 `dev` 分支時,會自動觸發 CI/CD Pipeline:
164
+ ### 版號遞增規則
267
165
 
268
- ```bash
269
- # 提交變更
270
- git add .
271
- git commit -m "feat: 新增功能"
166
+ | 版號類型 | 觸發方式 | 範例 |
167
+ |----------|----------|------|
168
+ | **patch**(修補) | 推送至 `dev` 分支時由 pre-push hook 自動遞增 | `1.0.76` → `1.0.77` |
169
+ | **minor**(次版本) | 手動執行 `npm run release-minor` | `1.0.76` → `1.1.0` |
170
+ | **major**(主版本) | 手動執行 `npm run release-major` | `1.0.76` → `2.0.0` |
171
+ | **alpha**(測試版) | 手動執行 `npm run alpha` | `1.0.76` → `1.0.77-alpha.1` |
172
+ | **beta**(測試版) | 手動執行 `npm run beta` | `1.0.76` → `1.0.77-beta.1` |
272
173
 
273
- # 推送到 dev 分支(自動觸發發布)
274
- git push origin dev
275
- ```
174
+ > 預發布版本(alpha/beta)推送至 GitLab `dev` 分支前,pre-push hook 會自動切回正式版號。
276
175
 
277
- #### 自動發布流程
176
+ ---
278
177
 
279
- 1. **Pre-Push Hook 檢查** ([.husky/pre-push](.husky/pre-push))
280
- - ✅ 執行測試(測試失敗則取消 push)
281
- - 🔢 自動版本遞增(`npm version patch`)
282
- - 🚀 將版本 commit 推送到 GitLab
178
+ ## 版本發布
283
179
 
284
- 2. **GitLab CI/CD Pipeline** (5 個階段,詳見 [.gitlab-ci.yml](.gitlab-ci.yml))
285
- - **Install**: 安裝依賴
286
- - **Test**: 執行單元測試
287
- - **Version**: 檢查版本是否存在,若存在則自動遞增
288
- - **Build**: 編譯套件(Rollup)
289
- - **Deploy**: 發布到 npm
180
+ ### 測試版(Alpha / Beta)
290
181
 
291
- ### 方式 2:本地手動發布(適用於緊急修復)
182
+ 開發中需要讓 client 端測試時,發布測試版本至 npm。**測試版無須推送至 GitLab。**
292
183
 
293
184
  ```bash
294
- # Patch 版本遞增(1.0.0 -> 1.0.1)
295
- npm run release
185
+ # 步驟 1:產生測試版版號(可重複執行以遞增版號)
186
+ npm run alpha
187
+ # 範例:1.0.75 → 1.0.76-alpha.1 → 1.0.76-alpha.2
296
188
 
297
- # Minor 版本遞增(1.0.0 -> 1.1.0)
298
- npm run release-minor
299
-
300
- # Major 版本遞增(1.0.0 -> 2.0.0)
301
- npm run release-major
189
+ # 步驟 2:編譯並推送至 npm
190
+ npm run alpha:publish
302
191
  ```
303
192
 
304
- **執行內容**:
305
- 1. 執行測試(`npm test`)
306
- 2. 編譯套件(`npm run build`)
307
- 3. 版本號遞增(`npm version patch/minor/major`)
308
- 4. 發布到 npm(`npm publish --access public`)
309
-
310
- ### 跳過 CI/CD 自動發布
311
-
312
- 在 commit 訊息中加入 `[skip ci]`:
193
+ Beta 版同理:
313
194
 
314
195
  ```bash
315
- git commit -m "docs: 更新 README [skip ci]"
316
- git push origin dev
196
+ npm run beta
197
+ npm run beta:publish
317
198
  ```
318
199
 
319
- ---
320
-
321
- ## 🔗 前端專案整合
322
-
323
- ### 在前端專案中安裝套件
200
+ 發布後,於 `package.json` 確認版號,並通知 client 端執行:
324
201
 
325
202
  ```bash
326
- npm install @udi-organization/udi-package@latest --legacy-peer
203
+ npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
327
204
  ```
328
205
 
329
- > `--legacy-peer` 用於處理 peer dependencies 版本衝突
330
-
331
- ### 導入並使用組件
206
+ ---
332
207
 
333
- ```jsx
334
- // 導入組件
335
- import { UdiTable, Button } from '@udi-organization/udi-package';
208
+ ### 正式版(自動 CI/CD)
336
209
 
337
- // 導入 Hooks
338
- import {
339
- useUdiTableSync,
340
- useUdiTableSyncMutipleTable
341
- } from '@udi-organization/udi-package';
210
+ 確認測試通過後,推送至 GitLab `dev` 分支即可自動觸發 CI/CD 流程。
342
211
 
343
- function MyComponent() {
344
- const tableProps = useUdiTableSync({
345
- // 配置選項...
346
- });
212
+ **流程如下:**
347
213
 
348
- return (
349
- <div>
350
- <Button>Click Me</Button>
351
- <UdiTable {...tableProps} />
352
- </div>
353
- );
354
- }
355
- ```
356
-
357
- ### 前端專案配置(推薦設定)
358
-
359
- 在前端專案的 [package.json](package.json) 中添加以下 scripts:
360
-
361
- ```json
362
- {
363
- "scripts": {
364
- "dev": "npm i @udi-organization/udi-package@latest --legacy-peer && npm run dev-normal",
365
- "dev-udi": "npm uninstall @udi-organization/udi-package --legacy-peer && cd /udi-package && sudo npm link && cd /build && npm link @udi-organization/udi-package --legacy-peer && npm run dev-normal",
366
- "dev-normal": "webpack-dev-server --mode=development",
367
- "get-udi": "npm i @udi-organization/udi-package@latest --legacy-peer",
368
- "get-udi-o": "npm i @udi-organization/udi-package@latest --legacy-peer",
369
- "dev-udi-o": "npm uninstall @udi-organization/udi-package --legacy-peer && cd /udi-package && sudo npm link && cd /build && npm link @udi-organization/udi-package --legacy-peer",
370
- }
371
- }
372
- ```
373
-
374
- **指令說明**:
375
-
376
- | 指令 | 用途 | 使用場景 |
377
- |-----|------|----------|
378
- | `npm run dev` | 正常開發模式(含啟動服務器) | 不需要修改 udi-package |
379
- | `npm run dev-udi` | Link 模式(含啟動服務器) | 需要同時開發套件和專案 |
380
- | `npm run dev-normal` | 啟動開發服務器 | 內部使用,不直接調用 |
381
- | `npm run get-udi` | 更新套件到最新版本 | 更新依賴或退出 Link 模式 |
382
- | `npm run get-udi-o` | 僅安裝最新套件(不啟動) | 單純更新套件版本 |
383
- | `npm run dev-udi-o` | 僅設置 Link 模式(不啟動) | 需要 Link 但手動啟動服務器 |
214
+ 1. 執行 `git push`(推送到 `dev` 分支)
215
+ 2. Pre-push hook 自動執行測試,並遞增 patch 版號後推送
216
+ 3. GitLab CI/CD 自動執行:
217
+ - 安裝依賴 → 執行測試 → 管理版號 → 編譯套件 → 發布至 npm
384
218
 
219
+ > **注意**:若當前版號為 alpha/beta 預發布版本,pre-push hook 會先自動切回正式版號並合併至最近一次 commit,然後要求重新執行 `git push`。
385
220
 
386
221
  ---
387
222
 
388
- ## 🤖 CI/CD 自動化
223
+ ## Pre-push Hook 說明
389
224
 
390
- ### 環境變數設定(僅發布者需要)
225
+ Push 到 `dev` 分支時,husky pre-push hook 會自動執行以下動作:
391
226
 
392
- #### 1. npm 帳號設定
227
+ | 情境 | 行為 |
228
+ |------|------|
229
+ | 一般 commit 推送到 `dev` | 執行測試 → 自動遞增 patch 版號 → 推送版號 commit → 觸發 CI/CD |
230
+ | 推送到非 `dev` 分支 | 只執行測試,不自動打版號 |
231
+ | 版號為 alpha/beta 時推送 | 自動切回正式版、合併至最近 commit,提示重新 push |
393
232
 
394
- **建立 npm 帳號**:
395
- 1. 前往 [https://www.npmjs.com](https://www.npmjs.com/) 註冊帳號
396
- 2. 組織管理員邀請加入 `@udi-organization`
397
-
398
- **登入驗證**:
399
- ```bash
400
- # 登入 npm
401
- npm login
233
+ > Hook 完成推送後會以 `exit 1` 結束,終端機會出現 error 訊息,**這是預期行為**,實際推送已成功完成,可忽略此錯誤。
402
234
 
403
- # 驗證登入狀態
404
- npm whoami
405
- ```
406
-
407
- #### 2. 建立 npm Access Token
235
+ ---
408
236
 
409
- 1. 前往 [https://www.npmjs.com](https://www.npmjs.com/) 登入
410
- 2. 點擊右上角頭像 → **"Access Tokens"**
411
- 3. 點擊 **"Generate New Token"** → 選擇 **"Classic Token"**
412
- 4. **選擇 Token 類型**: ✅ **Automation** (CI/CD 專用)
413
- 5. 複製 Token(例如:`npm_xxxxxxxxxxxx`)
237
+ ## CI/CD 設定
414
238
 
415
- ⚠️ **重要**: 離開頁面後就看不到了,請立即複製
239
+ > 團隊中只需一人設定,完成後所有成員皆可享有自動發布功能。
416
240
 
417
- #### 3. GitLab 設定環境變數
241
+ ### npm Automation Token
418
242
 
419
- | 變數名稱 | 用途 | 必要性 |
420
- |---------|------|--------|
421
- | `NPM_TOKEN` | npm 認證 token | **必要** |
422
- | `CI_PUSH_TOKEN` | GitLab push token(用於回推版本更新) | 選用 |
243
+ 1. 登入 [https://www.npmjs.com](https://www.npmjs.com)
244
+ 2. 右上角頭像 → **Access Tokens** → **Generate New Token**
245
+ 3. 選擇 **Classic Token** 選擇 **Automation** 類型
246
+ 4. 複製產生的 token(格式:`npm_xxxxxxxxxxxx`)
247
+ > ⚠️ 離開頁面後無法再次查看,請立即複製
423
248
 
424
- **設定步驟**:
249
+ ---
425
250
 
426
- 1. 進入 GitLab 專案
427
- 2. **Settings** → **CI/CD** → **Variables** → **Expand**
428
- 3. 點擊 **"Add variable"**
429
- 4. 填入資訊:
430
- - **Key**: `NPM_TOKEN`
431
- - **Value**: (貼上剛才的 token)
432
- - **Type**: Variable
433
- - ✅ 勾選 **"Mask variable"**
434
- - ✅ 勾選 **"Protect variable"**
435
- 5. 點擊 **"Add variable"**
251
+ ### GitLab CI/CD Variables
436
252
 
437
- ### GitLab CI/CD Pipeline 說明
253
+ 需設定兩個 Variables:`NPM_TOKEN` `CI_PUSH_TOKEN`
438
254
 
439
- 詳細配置見 [.gitlab-ci.yml](.gitlab-ci.yml)
255
+ #### 設定 NPM_TOKEN
440
256
 
441
- #### Pipeline 階段
257
+ 1. 進入 GitLab 專案 **udi / udi-package**
258
+ 2. 左側選單 → **Settings** → **CI/CD** → **Variables** → **Add variable**
259
+ 3. 填入:
442
260
 
443
- ```mermaid
444
- graph LR
445
- A[Install] --> B[Test]
446
- B --> C[Version]
447
- C --> D[Build]
448
- D --> E[Deploy]
449
- ```
261
+ | 欄位 | 值 |
262
+ |------|----|
263
+ | Key | `NPM_TOKEN` |
264
+ | Value | 上一步複製的 `npm_xxxx...` |
265
+ | Flags | ✅ Mask variable、✅ Protect variable |
450
266
 
451
- | 階段 | 說明 | 關鍵操作 |
452
- |------|------|----------|
453
- | **Install** | 安裝依賴 | `npm ci` |
454
- | **Test** | 執行測試 | `npm test` |
455
- | **Version** | 版本管理 | 檢查並遞增版本號 |
456
- | **Build** | 構建套件 | `npm run build` (Rollup) |
457
- | **Deploy** | 發布到 npm | `npm publish --access public` |
267
+ #### 設定 CI_PUSH_TOKEN(GitLab Personal Access Token)
458
268
 
459
- #### Pre-Push Hook 流程
269
+ 1. GitLab 右上角頭像 → **Edit Profile** → **Access Tokens** → **Add new token**
270
+ 2. 填入:
460
271
 
461
- 當執行 `git push origin dev` 時:
272
+ | 欄位 | |
273
+ |------|----|
274
+ | Token name | `CI Push Token` |
275
+ | Expiration date | 設定一年後 |
276
+ | Scopes | ✅ `write_repository` |
462
277
 
463
- ```bash
464
- ✅ 1. 檢測分支(只在 dev 分支執行)
465
- ✅ 2. 檢查 commit 訊息(避免無限循環)
466
- 🧪 3. 執行測試(npm test)
467
- 🔢 4. 版本遞增(npm version patch)
468
- 🚀 5. 自動推送到 GitLab
469
- ```
278
+ 3. 複製產生的 token(格式:`glpat-xxxxxxxxxxxxxxxxxxxx`)
279
+ 4. 回到專案 **Settings** → **CI/CD** → **Variables** → **Add variable**,填入:
470
280
 
281
+ | 欄位 | 值 |
282
+ |------|----|
283
+ | Key | `CI_PUSH_TOKEN` |
284
+ | Value | 上方複製的 `glpat-xxxx...` |
285
+ | Flags | ✅ Mask variable、✅ Protect variable |
471
286
 
287
+ ---
472
288
 
289
+ ## Scripts 速查
290
+
291
+ ### 套件端(udi-package)
292
+
293
+ | 指令 | 說明 |
294
+ |------|------|
295
+ | `npm run dev` | 啟動本地 webpack dev server(元件開發用沙箱) |
296
+ | `npm run build` | 單次編譯,輸出至 `dist/` |
297
+ | `npm run watch` | 持續監聽並自動編譯 |
298
+ | `npm run test` | 執行 Jest 單元測試 |
299
+ | `npm run alpha` | 產生 alpha 測試版版號 |
300
+ | `npm run alpha:publish` | 編譯並推送 alpha 版至 npm |
301
+ | `npm run beta` | 產生 beta 測試版版號 |
302
+ | `npm run beta:publish` | 編譯並推送 beta 版至 npm |
303
+
304
+ ### 客戶端(web-frontend)
305
+
306
+ | 指令 | 說明 |
307
+ |------|------|
308
+ | `npm run dev` | 一般開發模式(使用 npm 版套件) |
309
+ | `npm run dev-udi` | **Link 模式**:連結本地套件並啟動 dev server |
310
+ | `npm run dev-udi-o` | **Link 模式**:只連結本地套件,不啟動 dev server |
311
+ | `npm run get-udi` | 從 npm 安裝最新版套件並啟動 dev server |
312
+ | `npm run get-udi-o` | 從 npm 安裝最新版套件(不啟動 dev server) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udi-organization/udi-package",
3
- "version": "1.0.76",
3
+ "version": "1.0.78",
4
4
  "description": "package for udi",
5
5
  "repository": {
6
6
  "type": "gitlab",