@udi-organization/udi-package 1.0.67 → 1.0.69

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 +348 -238
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,357 +1,467 @@
1
- # 前端套件”udi-pacakge”開發流程:
1
+ # @udi-organization/udi-package
2
2
 
3
- ## 概述
3
+ > 基於 React 的 UI 組件庫,提供 UdiTable、Button 等可重用組件,支持 ESM 和 CommonJS 模組格式
4
4
 
5
- 前端專案共用套件 udi-package 開發規範
6
- 目的:集中管理跨專案Component、Utils Function
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)
7
7
 
8
- ---test
8
+ ## 📦 套件資訊
9
9
 
10
- ## 架構說明
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)
11
13
 
12
- ### 編譯工具分工
14
+ ## 🎯 核心特性
13
15
 
14
- - **Rollup**: 編譯套件輸出為標準 npm 包格式
15
- - **Webpack**: 編譯 sandbox 本地開發環境,提供熱更新與套件獨立的即時預覽
16
+ - **集中管理**: 統一維護跨專案共用的 Component 與 Utils Function
17
+ - **提升效率**: 避免重複開發,加速專案迭代
18
+ - **自動化發布**: 透過 GitLab CI/CD 實現自動化版本管理與發布
19
+ - **雙模式開發**: 支援正常模式與 Link 模式,滿足不同開發場景
20
+ - **完整測試**: 使用 Jest 進行單元測試,確保代碼品質
16
21
 
17
- ### 開發模式
22
+ ## 📋 目錄
18
23
 
19
- 1. **正常開發模式**: 使用 npm 官方發布的套件版本
20
- 2. **Link 開發模式**: 使用本地 udi-package 進行即時開發
24
+ - [快速開始](#快速開始)
25
+ - [專案結構](#專案結構)
26
+ - [環境設定](#環境設定)
27
+ - [開發模式](#開發模式)
28
+ - [測試](#測試)
29
+ - [版本發布](#版本發布)
30
+ - [前端專案整合](#前端專案整合)
31
+ - [CI/CD 自動化](#cicd-自動化)
32
+ - [常見問題](#常見問題)
21
33
 
22
34
  ---
23
35
 
24
- ## 資料夾結構
36
+ ## 🚀 快速開始
25
37
 
26
- ```
27
- project-root/
28
- ├── frontend-project/ # 前端專案
29
- │ ├── node_modules/
30
- │ ├── package.json
31
- │ └── .git/
32
- │ └── hooks/
33
- │ └── pre-push # Git hook 防護
34
- └── udi-package/ # 共用套件 (與前端專案同層)
35
- ├── src/
36
- ├── dist/ # Rollup 編譯輸出
37
- └── package.json
38
+ ### 安裝套件
38
39
 
40
+ ```bash
41
+ npm install @udi-organization/udi-package --legacy-peer
39
42
  ```
40
43
 
41
- ⚠️ **重要**: `udi-package` 必須與前端專案放在同一層級,因為 Docker volume 需要使用固定路徑進行映射。
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
+ }
62
+ ```
42
63
 
43
64
  ---
44
65
 
45
- ## 前置作業
66
+ ## 📁 專案結構
46
67
 
47
- ### 1. 資料夾配置
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
+ ```
48
105
 
49
- `udi-package` 放置在與前端專案相同的目錄層級。
50
- (首次clone下來必須執行 npm install & 若要使用npm link則需要先執行npm run build打包dist檔案給前端專案抓取)
106
+ ### 架構說明
51
107
 
52
- ### 2. 設置 Git Hook 防護
108
+ #### 編譯工具分工
53
109
 
54
- 在前端專案中執行以下命令:
110
+ | 工具 | 用途 | 輸出 |
111
+ |------|------|------|
112
+ | **Rollup** | 編譯套件為標準 npm 包格式 | `dist/index.cjs.js`、`dist/index.esm.js` |
113
+ | **Webpack** | 提供本地開發環境,支持熱更新 | `dist-dev/bundle.js` (僅開發用) |
55
114
 
56
- ```bash
57
- nano .git/hooks/pre-push
115
+ #### 開發模式
116
+
117
+ 1. **正常開發模式**: 使用 npm 官方發布的套件版本
118
+ 2. **Link 開發模式**: 使用本地 udi-package 進行即時開發
119
+
120
+ #### 工作目錄結構要求
58
121
 
59
122
  ```
123
+ workspace/
124
+ ├── udi-package/ # 套件專案
125
+ ├── imp-frontend/ # 前端專案 A
126
+ ├── other-frontend/ # 前端專案 B
127
+ └── ...
128
+ ```
129
+
130
+ ⚠️ **重要**: `udi-package` 必須與前端專案放在同一層級,因為 Docker volume 映射需要固定路徑 `/udi-package`
131
+
132
+ ---
133
+
134
+ ## 🔧 環境設定
135
+
136
+ ### 前置要求
60
137
 
61
- 貼上以下內容:
138
+ | 工具 | 版本要求 |
139
+ |------|----------|
140
+ | Node.js | >= 20.x |
141
+ | npm | >= 9.x |
142
+ | Git | >= 2.x |
62
143
 
63
144
  ```bash
64
- #!/bin/bash
65
-
66
- # 檢查 @udi-organization/udi-package 是否為 symlink (npm link)
67
- PACKAGE_PATH="node_modules/@udi-organization/udi-package"
68
-
69
- if [ -L "$PACKAGE_PATH" ]; then
70
- echo "❌ 錯誤: 檢測到使用 npm link"
71
- echo ""
72
- echo "目前 @udi-organization/udi-package 是使用本地 link"
73
- echo "請先執行以下命令切換回正式版本:"
74
- echo ""
75
- echo " npm run get-udi-o"
76
- echo ""
77
- echo "或手動執行:"
78
- echo " npm uninstall @udi-organization/udi-package --legacy-peer"
79
- echo " npm install @udi-organization/udi-package@latest --legacy-peer"
80
- echo ""
81
- exit 1
82
- fi
83
-
84
- # 檢查通過
85
- echo "✓ 檢查通過: 未使用本地 link"
86
- exit 0
145
+ git clone https://gitlab.com/udi3732104/udi-package.git
146
+ cd udi-package
147
+ ```
148
+
149
+ ### 2. 安裝依賴
87
150
 
151
+ ```bash
152
+ npm install
88
153
  ```
89
154
 
90
- 儲存並設置執行權限:
155
+ ### 3. 驗證環境
91
156
 
92
157
  ```bash
93
- # Ctrl+O (儲存) → Enter → Ctrl+X (退出)
94
- chmod +x .git/hooks/pre-push
158
+ # 執行測試
159
+ npm test
95
160
 
161
+ # 構建套件
162
+ npm run build
96
163
  ```
97
164
 
98
- ### 3. NPM 組織設定
99
-
100
- ### 建立並加入組織
101
-
102
- 1. 建立個人 npm 帳號
103
- 2. 由管理員邀請加入 `@udi-organization` 組織
104
- 3. 執行登入:
105
-
106
- ```bash
107
- npm login
108
-
109
- ```
110
-
111
- 會自動開啟瀏覽器完成登入
112
-
113
- 4. 確認登入狀態:
114
-
115
- ```bash
116
- npm whoami
117
-
118
- ```
119
-
120
-
121
165
  ---
122
166
 
123
- ## NPM Scripts 說明
167
+ ## 💻 開發模式
124
168
 
125
- ### 前端專案指令
169
+ ### 模式 1:獨立開發套件(推薦用於組件開發)
126
170
 
127
- ```json
128
- {
129
- "scripts": {
130
- // 正常開發模式 自動取得最新版本udi-package - 使用 npm 官方套件
131
- "dev": "npm i @udi-organization/udi-package@latest --legacy-peer && NODE_ENV=development webpack-dev-server --progress --hot --mode=development --host=0.0.0.0",
171
+ 適用於開發新組件或修改現有組件時的獨立測試。
132
172
 
133
- // Link 開發模式 - 使用本地 udi-package
134
- "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 && NODE_ENV=development webpack-dev-server --progress --hot --mode=development --host=0.0.0.0",
173
+ ```bash
174
+ # 啟動本地開發服務器(Webpack)
175
+ npm run dev
176
+ ```
135
177
 
136
- // 切換回正常模式 (不啟動專案) 也可用於取得最新版本udi-package
137
- "get-udi-o": "npm i @udi-organization/udi-package@latest --legacy-peer",
138
- }
139
- }
178
+ - 服務器運行於 `http://localhost:3000`
179
+ - 支持熱模組替換(HMR)
180
+ - 編輯 [dev/main.jsx](dev/main.jsx) 來測試組件
140
181
 
141
- ```
182
+ ### 模式 2:與前端專案聯動開發(使用 npm link)
142
183
 
143
- ### udi-package 套件指令
184
+ 適用於需要在實際專案中測試套件的情況。
144
185
 
145
- ```json
146
- {
147
- "scripts": {
148
- // 監聽模式 - 自動編譯變更
149
- "watch": "rollup -c --watch",
186
+ #### 步驟 1:在套件專案中建立鏈接
150
187
 
151
- // 單次編譯
152
- "build": "rollup -c",
188
+ ```bash
189
+ cd /path/to/udi-package
153
190
 
154
- // 發布新版本(已改為 GitLab CI 自動處理,一般不需手動執行)
155
- "release": "自動更新版本號並發布至 npm"
156
- }
157
- }
191
+ # 建立全局鏈接
192
+ sudo npm link
158
193
 
194
+ # 啟動監聽模式(自動編譯變更)
195
+ npm run watch
159
196
  ```
160
197
 
161
- ---
162
-
163
- ## 開發流程
198
+ > `npm run watch` 會監聽 [src/](src/) 目錄的變更,並自動使用 Rollup 編譯到 [dist/](dist/)
164
199
 
165
- ### 情境一: 不需修改 udi-package
200
+ #### 步驟 2:在前端專案中使用鏈接
166
201
 
167
202
  ```bash
168
- # 直接啟動專案
169
- npm run dev
203
+ cd /path/to/your-frontend-project
170
204
 
171
- ```
205
+ # 移除 npm 安裝的套件
206
+ npm uninstall @udi-organization/udi-package --legacy-peer
172
207
 
173
- ### 情境二: 需要開發 udi-package
208
+ # 鏈接本地套件
209
+ npm link @udi-organization/udi-package --legacy-peer
174
210
 
175
- ### 步驟 1: 啟動套件監聽
211
+ # 啟動開發服務器
212
+ npm run dev-normal
213
+ ```
176
214
 
177
- `udi-package` 目錄執行:
215
+ #### 步驟 3:完成開發後恢復正常模式
178
216
 
179
217
  ```bash
180
- npm run watch
181
- # 或單次編譯
182
- npm run build
218
+ # 取消鏈接
219
+ npm unlink @udi-organization/udi-package
183
220
 
221
+ # 重新安裝 npm 套件
222
+ npm install @udi-organization/udi-package@latest --legacy-peer
184
223
  ```
185
224
 
186
- ### 步驟 2: 啟動 Link 開發模式
225
+ ---
226
+
227
+ ## 🧪 測試
228
+
229
+ 本專案使用 Jest 進行單元測試,配置詳見 [jest.config.cjs](jest.config.cjs)。
187
230
 
188
- 在前端專案目錄執行:
231
+ ### 執行測試
189
232
 
190
233
  ```bash
191
- npm run dev-udi
234
+ # 執行所有測試
235
+ npm test
192
236
 
237
+ # 監聽模式(開發時推薦)
238
+ npm run test:watch
239
+
240
+ # 生成測試覆蓋率報告
241
+ npm run test:coverage
193
242
  ```
194
243
 
195
- ### 步驟 3: 開發與測試
244
+ ### 測試文件位置
196
245
 
197
- - 修改 `udi-package/src` 中的程式碼
198
- - Rollup 會自動編譯至 `dist/` 目錄
199
- - 前端專案透過 link 即時取得更新
246
+ 測試文件與源文件放在同一目錄,命名規則:`*.test.js`
200
247
 
201
- ### 步驟 4: 發布新版本
248
+ ```
249
+ src/udiTable/hooks/
250
+ ├── useTableSort.js
251
+ └── useTableSort.test.js
252
+ ```
202
253
 
203
- 版本發布已改為由 **GitLab CI 自動化處理**,不需要手動執行 `npm run release`。
254
+ ---
255
+
256
+ ## 📦 版本發布
257
+
258
+ ### 發布流程概覽
204
259
 
205
- **發布流程**:
260
+ 本專案支持 **本地手動發布** 和 **GitLab CI/CD 自動發布** 兩種方式。
206
261
 
207
- 1. 確保所有變更已 commit
208
- 2. 推送到 GitLab
209
- 3. GitLab CI 會自動執行測試、建置和發布
262
+ ### 方式 1:GitLab CI/CD 自動發布(推薦)
263
+
264
+ #### 自動發布觸發條件
265
+
266
+ 當你 push 到 `dev` 分支時,會自動觸發 CI/CD Pipeline:
210
267
 
211
268
  ```bash
212
- # 在 udi-package 目錄
269
+ # 提交變更
213
270
  git add .
214
- git commit -m "feat: 新功能說明"
215
- git push origin "new feature branch"
216
- # GitLab CI 會自動處理發布流程
271
+ git commit -m "feat: 新增功能"
217
272
 
273
+ # 推送到 dev 分支(自動觸發發布)
274
+ git push origin dev
218
275
  ```
219
276
 
220
- **查看發布狀態**: 在 GitLab 專案的 CI/CD > Pipelines 頁面查看自動發布的執行狀態。
277
+ #### 自動發布流程
278
+
279
+ 1. **Pre-Push Hook 檢查** ([.husky/pre-push](.husky/pre-push))
280
+ - ✅ 執行測試(測試失敗則取消 push)
281
+ - 🔢 自動版本遞增(`npm version patch`)
282
+ - 🚀 將版本 commit 推送到 GitLab
283
+
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
290
+
291
+ ### 方式 2:本地手動發布(適用於緊急修復)
221
292
 
222
- **手動發布(僅緊急情況)**:
223
293
  ```bash
224
- npm run release # 一般情況請勿使用,優先使用 GitLab CI 自動發布
294
+ # Patch 版本遞增(1.0.0 -> 1.0.1)
295
+ npm run release
296
+
297
+ # Minor 版本遞增(1.0.0 -> 1.1.0)
298
+ npm run release-minor
225
299
 
300
+ # Major 版本遞增(1.0.0 -> 2.0.0)
301
+ npm run release-major
226
302
  ```
227
303
 
228
- ---
304
+ **執行內容**:
305
+ 1. 執行測試(`npm test`)
306
+ 2. 編譯套件(`npm run build`)
307
+ 3. 版本號遞增(`npm version patch/minor/major`)
308
+ 4. 發布到 npm(`npm publish --access public`)
229
309
 
230
- ## Git 推送流程
231
-
232
- ### 完整推送步驟
233
-
234
- 1. **建立 Feature Branch**
235
-
236
- ```bash
237
- git checkout -b feature/your-feature-name
238
-
239
- ```
240
-
241
- 2. **持續開發與提交**
242
-
243
- ```bash
244
- git add .
245
- git commit -m "feat: 功能描述"
246
- git push origin feature/your-feature-name
247
-
248
- ```
249
-
250
- 3. **推送前切換回正常模式**
251
-
252
- ```bash
253
- # 方法一: 只切換不啟動
254
- npm run get-udi-o
255
-
256
- # 方法二: 切換並驗證專案
257
- npm run dev
258
-
259
- ```
260
-
261
- 4. **驗證專案正常運作**
262
- - 確認專案可正常啟動
263
- - 確認功能運作正常
264
- - 確認 package.json 包含正式的套件依賴
265
- 5. **推送到 GitLab**
266
-
267
- ```bash
268
- git push origin feature/your-feature-name
269
-
270
- ```
271
-
272
- > Git hook 會自動檢查是否為 link 模式,防止錯誤推送
273
- >
274
- 6. **通過 Pipeline 後合併**
275
- - 確認 GitLab CI/CD Pipeline 全部通過
276
- - 提交 Merge Request 至 `dev` 分支
277
- - Code Review 通過後合併
310
+ ### 跳過 CI/CD 自動發布
278
311
 
279
- ---
312
+ 在 commit 訊息中加入 `[skip ci]`:
280
313
 
281
- ## 常見問題處理
314
+ ```bash
315
+ git commit -m "docs: 更新 README [skip ci]"
316
+ git push origin dev
317
+ ```
282
318
 
283
- ### Q1: 推送時出現 "檢測到使用 npm link" 錯誤
319
+ ---
284
320
 
285
- **原因**: 目前處於 link 開發模式
321
+ ## 🔗 前端專案整合
286
322
 
287
- **解決**:
323
+ ### 在前端專案中安裝套件
288
324
 
289
325
  ```bash
290
- npm run get-udi-o
291
- # 或
292
- npm run dev # 切換並驗證專案
293
-
326
+ npm install @udi-organization/udi-package@latest --legacy-peer
294
327
  ```
295
328
 
296
- ### Q2: udi-package 修改後前端專案沒有更新
329
+ > `--legacy-peer` 用於處理 peer dependencies 版本衝突
297
330
 
298
- **檢查項目**:
331
+ ### 導入並使用組件
299
332
 
300
- 1. 確認 `udi-package` 目錄是否執行 `npm run watch`
301
- 2. 確認前端專案是否使用 `npm run dev-udi` 啟動
302
- 3. 檢查編譯是否有錯誤訊息
333
+ ```jsx
334
+ // 導入組件
335
+ import { UdiTable, Button } from '@udi-organization/udi-package';
303
336
 
304
- ### Q3: npm link 權限問題
337
+ // 導入 Hooks
338
+ import {
339
+ useUdiTableSync,
340
+ useUdiTableSyncMutipleTable
341
+ } from '@udi-organization/udi-package';
305
342
 
306
- **解決**: 使用 `sudo` 執行 link 指令
343
+ function MyComponent() {
344
+ const tableProps = useUdiTableSync({
345
+ // 配置選項...
346
+ });
307
347
 
308
- ```bash
309
- cd ../udi-package
310
- sudo npm link
348
+ return (
349
+ <div>
350
+ <Button>Click Me</Button>
351
+ <UdiTable {...tableProps} />
352
+ </div>
353
+ );
354
+ }
355
+ ```
356
+
357
+ ### 前端專案配置(推薦設定)
311
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
+ }
369
+ }
312
370
  ```
313
371
 
314
- ### Q4: 發布失敗 - 未登入或權限不足
372
+ **指令說明**:
373
+
374
+ | 指令 | 用途 | 使用場景 |
375
+ |-----|------|----------|
376
+ | `npm run dev` | 正常開發模式 | 不需要修改 udi-package |
377
+ | `npm run dev-udi` | Link 模式 | 需要同時開發套件和專案 |
378
+ | `npm run dev-normal` | 啟動開發服務器 | 內部使用,不直接調用 |
379
+ | `npm run get-udi` | 更新套件到最新版本 | 更新依賴或退出 Link 模式 |
380
+
381
+ ---
382
+
383
+ ## 🤖 CI/CD 自動化
384
+
385
+ ### 環境變數設定(僅發布者需要)
315
386
 
316
- **解決**:
387
+ #### 1. npm 帳號設定
317
388
 
389
+ **建立 npm 帳號**:
390
+ 1. 前往 [https://www.npmjs.com](https://www.npmjs.com/) 註冊帳號
391
+ 2. 組織管理員邀請加入 `@udi-organization`
392
+
393
+ **登入驗證**:
318
394
  ```bash
395
+ # 登入 npm
319
396
  npm login
320
- npm whoami # 確認登入狀態
321
397
 
398
+ # 驗證登入狀態
399
+ npm whoami
322
400
  ```
323
401
 
324
- ---
402
+ #### 2. 建立 npm Access Token
403
+
404
+ 1. 前往 [https://www.npmjs.com](https://www.npmjs.com/) 登入
405
+ 2. 點擊右上角頭像 → **"Access Tokens"**
406
+ 3. 點擊 **"Generate New Token"** → 選擇 **"Classic Token"**
407
+ 4. **選擇 Token 類型**: ✅ **Automation** (CI/CD 專用)
408
+ 5. 複製 Token(例如:`npm_xxxxxxxxxxxx`)
409
+
410
+ ⚠️ **重要**: 離開頁面後就看不到了,請立即複製
411
+
412
+ #### 3. 在 GitLab 設定環境變數
413
+
414
+ | 變數名稱 | 用途 | 必要性 |
415
+ |---------|------|--------|
416
+ | `NPM_TOKEN` | npm 認證 token | **必要** |
417
+ | `CI_PUSH_TOKEN` | GitLab push token(用於回推版本更新) | 選用 |
325
418
 
326
- ## 快速參考
419
+ **設定步驟**:
327
420
 
328
- ### 常用指令速查
421
+ 1. 進入 GitLab 專案
422
+ 2. **Settings** → **CI/CD** → **Variables** → **Expand**
423
+ 3. 點擊 **"Add variable"**
424
+ 4. 填入資訊:
425
+ - **Key**: `NPM_TOKEN`
426
+ - **Value**: (貼上剛才的 token)
427
+ - **Type**: Variable
428
+ - ✅ 勾選 **"Mask variable"**
429
+ - ✅ 勾選 **"Protect variable"**
430
+ 5. 點擊 **"Add variable"**
329
431
 
330
- | 情境 | 指令 |
331
- | --- | --- |
332
- | 正常開發 | `npm run dev` |
333
- | 開發套件 | `npm run dev-udi` |
334
- | 切換回正常模式 | `npm run get-udi-o` |
335
- | 套件監聽編譯 | `npm run watch` (在 udi-package) |
336
- | 發布新版本 | 由 GitLab CI 自動處理 |
337
- | 檢查登入狀態 | `npm whoami` |
432
+ ### GitLab CI/CD Pipeline 說明
338
433
 
339
- ### 檢查清單
434
+ 詳細配置見 [.gitlab-ci.yml](.gitlab-ci.yml)
340
435
 
341
- **開發前**
436
+ #### Pipeline 階段
342
437
 
343
- - [ ] udi-package 與專案在同層目錄
344
- - [ ] Git hook 已設置
345
- - [ ] npm 已登入正確組織
438
+ ```mermaid
439
+ graph LR
440
+ A[Install] --> B[Test]
441
+ B --> C[Version]
442
+ C --> D[Build]
443
+ D --> E[Deploy]
444
+ ```
445
+
446
+ | 階段 | 說明 | 關鍵操作 |
447
+ |------|------|----------|
448
+ | **Install** | 安裝依賴 | `npm ci` |
449
+ | **Test** | 執行測試 | `npm test` |
450
+ | **Version** | 版本管理 | 檢查並遞增版本號 |
451
+ | **Build** | 構建套件 | `npm run build` (Rollup) |
452
+ | **Deploy** | 發布到 npm | `npm publish --access public` |
453
+
454
+ #### Pre-Push Hook 流程
346
455
 
347
- **推送前**
456
+ 當執行 `git push origin dev` 時:
457
+
458
+ ```bash
459
+ ✅ 1. 檢測分支(只在 dev 分支執行)
460
+ ✅ 2. 檢查 commit 訊息(避免無限循環)
461
+ 🧪 3. 執行測試(npm test)
462
+ 🔢 4. 版本遞增(npm version patch)
463
+ 🚀 5. 自動推送到 GitLab
464
+ ```
348
465
 
349
- - [ ] 切換回正常模式 (`npm run get-udi-o`)
350
- - [ ] 專案可正常運作
351
- - [ ] 所有變更已 commit
352
466
 
353
- **發布套件前**
354
467
 
355
- - [ ] 所有變更已 commit 並推送到 GitLab
356
- - [ ] 確認 GitLab CI Pipeline 執行成功
357
- - [ ] GitLab CI 會自動處理版本發布
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udi-organization/udi-package",
3
- "version": "1.0.67",
3
+ "version": "1.0.69",
4
4
  "description": "package for udi",
5
5
  "repository": {
6
6
  "type": "gitlab",