@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.
- package/README.md +348 -238
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,357 +1,467 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @udi-organization/udi-package
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 基於 React 的 UI 組件庫,提供 UdiTable、Button 等可重用組件,支持 ESM 和 CommonJS 模組格式
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/@udi-organization/udi-package)
|
|
6
|
+
[](https://opensource.org/licenses/ISC)
|
|
7
7
|
|
|
8
|
-
|
|
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
|
-
-
|
|
15
|
-
-
|
|
16
|
+
- **集中管理**: 統一維護跨專案共用的 Component 與 Utils Function
|
|
17
|
+
- **提升效率**: 避免重複開發,加速專案迭代
|
|
18
|
+
- **自動化發布**: 透過 GitLab CI/CD 實現自動化版本管理與發布
|
|
19
|
+
- **雙模式開發**: 支援正常模式與 Link 模式,滿足不同開發場景
|
|
20
|
+
- **完整測試**: 使用 Jest 進行單元測試,確保代碼品質
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
## 📋 目錄
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
50
|
-
(首次clone下來必須執行 npm install & 若要使用npm link則需要先執行npm run build打包dist檔案給前端專案抓取)
|
|
106
|
+
### 架構說明
|
|
51
107
|
|
|
52
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
#
|
|
94
|
-
|
|
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
|
-
##
|
|
167
|
+
## 💻 開發模式
|
|
124
168
|
|
|
125
|
-
###
|
|
169
|
+
### 模式 1:獨立開發套件(推薦用於組件開發)
|
|
126
170
|
|
|
127
|
-
|
|
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
|
-
|
|
134
|
-
|
|
173
|
+
```bash
|
|
174
|
+
# 啟動本地開發服務器(Webpack)
|
|
175
|
+
npm run dev
|
|
176
|
+
```
|
|
135
177
|
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
184
|
+
適用於需要在實際專案中測試套件的情況。
|
|
144
185
|
|
|
145
|
-
|
|
146
|
-
{
|
|
147
|
-
"scripts": {
|
|
148
|
-
// 監聽模式 - 自動編譯變更
|
|
149
|
-
"watch": "rollup -c --watch",
|
|
186
|
+
#### 步驟 1:在套件專案中建立鏈接
|
|
150
187
|
|
|
151
|
-
|
|
152
|
-
|
|
188
|
+
```bash
|
|
189
|
+
cd /path/to/udi-package
|
|
153
190
|
|
|
154
|
-
|
|
155
|
-
|
|
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
|
-
|
|
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
|
-
|
|
208
|
+
# 鏈接本地套件
|
|
209
|
+
npm link @udi-organization/udi-package --legacy-peer
|
|
174
210
|
|
|
175
|
-
|
|
211
|
+
# 啟動開發服務器
|
|
212
|
+
npm run dev-normal
|
|
213
|
+
```
|
|
176
214
|
|
|
177
|
-
|
|
215
|
+
#### 步驟 3:完成開發後恢復正常模式
|
|
178
216
|
|
|
179
217
|
```bash
|
|
180
|
-
|
|
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
|
-
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 🧪 測試
|
|
228
|
+
|
|
229
|
+
本專案使用 Jest 進行單元測試,配置詳見 [jest.config.cjs](jest.config.cjs)。
|
|
187
230
|
|
|
188
|
-
|
|
231
|
+
### 執行測試
|
|
189
232
|
|
|
190
233
|
```bash
|
|
191
|
-
|
|
234
|
+
# 執行所有測試
|
|
235
|
+
npm test
|
|
192
236
|
|
|
237
|
+
# 監聽模式(開發時推薦)
|
|
238
|
+
npm run test:watch
|
|
239
|
+
|
|
240
|
+
# 生成測試覆蓋率報告
|
|
241
|
+
npm run test:coverage
|
|
193
242
|
```
|
|
194
243
|
|
|
195
|
-
###
|
|
244
|
+
### 測試文件位置
|
|
196
245
|
|
|
197
|
-
|
|
198
|
-
- Rollup 會自動編譯至 `dist/` 目錄
|
|
199
|
-
- 前端專案透過 link 即時取得更新
|
|
246
|
+
測試文件與源文件放在同一目錄,命名規則:`*.test.js`
|
|
200
247
|
|
|
201
|
-
|
|
248
|
+
```
|
|
249
|
+
src/udiTable/hooks/
|
|
250
|
+
├── useTableSort.js
|
|
251
|
+
└── useTableSort.test.js
|
|
252
|
+
```
|
|
202
253
|
|
|
203
|
-
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 📦 版本發布
|
|
257
|
+
|
|
258
|
+
### 發布流程概覽
|
|
204
259
|
|
|
205
|
-
|
|
260
|
+
本專案支持 **本地手動發布** 和 **GitLab CI/CD 自動發布** 兩種方式。
|
|
206
261
|
|
|
207
|
-
1
|
|
208
|
-
|
|
209
|
-
|
|
262
|
+
### 方式 1:GitLab CI/CD 自動發布(推薦)
|
|
263
|
+
|
|
264
|
+
#### 自動發布觸發條件
|
|
265
|
+
|
|
266
|
+
當你 push 到 `dev` 分支時,會自動觸發 CI/CD Pipeline:
|
|
210
267
|
|
|
211
268
|
```bash
|
|
212
|
-
#
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
319
|
+
---
|
|
284
320
|
|
|
285
|
-
|
|
321
|
+
## 🔗 前端專案整合
|
|
286
322
|
|
|
287
|
-
|
|
323
|
+
### 在前端專案中安裝套件
|
|
288
324
|
|
|
289
325
|
```bash
|
|
290
|
-
npm
|
|
291
|
-
# 或
|
|
292
|
-
npm run dev # 切換並驗證專案
|
|
293
|
-
|
|
326
|
+
npm install @udi-organization/udi-package@latest --legacy-peer
|
|
294
327
|
```
|
|
295
328
|
|
|
296
|
-
|
|
329
|
+
> `--legacy-peer` 用於處理 peer dependencies 版本衝突
|
|
297
330
|
|
|
298
|
-
|
|
331
|
+
### 導入並使用組件
|
|
299
332
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
333
|
+
```jsx
|
|
334
|
+
// 導入組件
|
|
335
|
+
import { UdiTable, Button } from '@udi-organization/udi-package';
|
|
303
336
|
|
|
304
|
-
|
|
337
|
+
// 導入 Hooks
|
|
338
|
+
import {
|
|
339
|
+
useUdiTableSync,
|
|
340
|
+
useUdiTableSyncMutipleTable
|
|
341
|
+
} from '@udi-organization/udi-package';
|
|
305
342
|
|
|
306
|
-
|
|
343
|
+
function MyComponent() {
|
|
344
|
+
const tableProps = useUdiTableSync({
|
|
345
|
+
// 配置選項...
|
|
346
|
+
});
|
|
307
347
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
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
|
-
|
|
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
|
-
|
|
344
|
-
|
|
345
|
-
|
|
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 會自動處理版本發布
|