@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.
- package/README.md +189 -349
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,472 +1,312 @@
|
|
|
1
1
|
# @udi-organization/udi-package
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/@udi-organization/udi-package)
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
[](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
|
|
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
|
-
|
|
124
|
-
|
|
125
|
-
├── imp-frontend/ # 前端專案 A
|
|
126
|
-
├── other-frontend/ # 前端專案 B
|
|
127
|
-
└── ...
|
|
50
|
+
udi-package/ ← 套件端(本專案)
|
|
51
|
+
web-frontend/ ← 客戶端(前端專案)
|
|
128
52
|
```
|
|
129
53
|
|
|
130
|
-
|
|
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
|
-
|
|
145
|
-
git clone https://gitlab.com/udi3732104/udi-package.git
|
|
146
|
-
cd udi-package
|
|
147
|
-
```
|
|
71
|
+
---
|
|
148
72
|
|
|
149
|
-
|
|
73
|
+
## 開發流程
|
|
150
74
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
75
|
+
### Link 模式(本地即時開發)
|
|
76
|
+
|
|
77
|
+
在 `udi-package` 有持續變動時使用,client 端會直接讀取本地 `dist/` 資料夾。
|
|
154
78
|
|
|
155
|
-
|
|
79
|
+
**套件端(udi-package):**
|
|
156
80
|
|
|
157
81
|
```bash
|
|
158
|
-
#
|
|
159
|
-
npm
|
|
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
|
-
|
|
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
|
-
|
|
174
|
-
# 啟動本地開發服務器(Webpack)
|
|
175
|
-
npm run dev
|
|
176
|
-
```
|
|
105
|
+
> **注意**:link 模式會將 `@udi-organization/udi-package` 從 `package.json` 中移除,改用本地路徑作為依賴。**git push 前必須先切換回 release 模式。**
|
|
177
106
|
|
|
178
|
-
|
|
179
|
-
- 支持熱模組替換(HMR)
|
|
180
|
-
- 編輯 [dev/main.jsx](dev/main.jsx) 來測試組件
|
|
107
|
+
---
|
|
181
108
|
|
|
182
|
-
###
|
|
109
|
+
### Release 模式(使用 npm 正式版)
|
|
183
110
|
|
|
184
|
-
|
|
111
|
+
套件開發完畢、測試通過後,client 端切換回從 npm 取得套件。
|
|
185
112
|
|
|
186
|
-
|
|
113
|
+
**客戶端(web-frontend):**
|
|
187
114
|
|
|
188
115
|
```bash
|
|
189
|
-
|
|
116
|
+
# 安裝最新版並啟動開發伺服器
|
|
117
|
+
npm run get-udi
|
|
190
118
|
|
|
191
|
-
#
|
|
192
|
-
|
|
119
|
+
# 只安裝最新版,不啟動開發伺服器
|
|
120
|
+
npm run get-udi-o
|
|
193
121
|
|
|
194
|
-
#
|
|
195
|
-
npm
|
|
122
|
+
# 安裝指定版本(測試版或特定版本)
|
|
123
|
+
npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
|
|
196
124
|
```
|
|
197
125
|
|
|
198
|
-
|
|
126
|
+
---
|
|
199
127
|
|
|
200
|
-
|
|
128
|
+
## 版本資訊
|
|
201
129
|
|
|
202
|
-
|
|
203
|
-
cd /path/to/your-frontend-project
|
|
130
|
+
### 當前版本
|
|
204
131
|
|
|
205
|
-
|
|
206
|
-
npm uninstall @udi-organization/udi-package --legacy-peer
|
|
132
|
+
於 `package.json` 查看目前版號:
|
|
207
133
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
# 啟動開發服務器
|
|
212
|
-
npm run dev-normal
|
|
134
|
+
```bash
|
|
135
|
+
node -p "require('./package.json').version"
|
|
213
136
|
```
|
|
214
137
|
|
|
215
|
-
|
|
138
|
+
或至 npm 查詢已發布的最新版本:
|
|
216
139
|
|
|
217
140
|
```bash
|
|
218
|
-
#
|
|
219
|
-
npm
|
|
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
|
-
|
|
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
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
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
|
-
|
|
274
|
-
git push origin dev
|
|
275
|
-
```
|
|
174
|
+
> 預發布版本(alpha/beta)推送至 GitLab `dev` 分支前,pre-push hook 會自動切回正式版號。
|
|
276
175
|
|
|
277
|
-
|
|
176
|
+
---
|
|
278
177
|
|
|
279
|
-
|
|
280
|
-
- ✅ 執行測試(測試失敗則取消 push)
|
|
281
|
-
- 🔢 自動版本遞增(`npm version patch`)
|
|
282
|
-
- 🚀 將版本 commit 推送到 GitLab
|
|
178
|
+
## 版本發布
|
|
283
179
|
|
|
284
|
-
|
|
285
|
-
- **Install**: 安裝依賴
|
|
286
|
-
- **Test**: 執行單元測試
|
|
287
|
-
- **Version**: 檢查版本是否存在,若存在則自動遞增
|
|
288
|
-
- **Build**: 編譯套件(Rollup)
|
|
289
|
-
- **Deploy**: 發布到 npm
|
|
180
|
+
### 測試版(Alpha / Beta)
|
|
290
181
|
|
|
291
|
-
|
|
182
|
+
開發中需要讓 client 端測試時,發布測試版本至 npm。**測試版無須推送至 GitLab。**
|
|
292
183
|
|
|
293
184
|
```bash
|
|
294
|
-
#
|
|
295
|
-
npm run
|
|
185
|
+
# 步驟 1:產生測試版版號(可重複執行以遞增版號)
|
|
186
|
+
npm run alpha
|
|
187
|
+
# 範例:1.0.75 → 1.0.76-alpha.1 → 1.0.76-alpha.2
|
|
296
188
|
|
|
297
|
-
#
|
|
298
|
-
npm run
|
|
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
|
-
|
|
316
|
-
|
|
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
|
|
203
|
+
npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
|
|
327
204
|
```
|
|
328
205
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
### 導入並使用組件
|
|
206
|
+
---
|
|
332
207
|
|
|
333
|
-
|
|
334
|
-
// 導入組件
|
|
335
|
-
import { UdiTable, Button } from '@udi-organization/udi-package';
|
|
208
|
+
### 正式版(自動 CI/CD)
|
|
336
209
|
|
|
337
|
-
|
|
338
|
-
import {
|
|
339
|
-
useUdiTableSync,
|
|
340
|
-
useUdiTableSyncMutipleTable
|
|
341
|
-
} from '@udi-organization/udi-package';
|
|
210
|
+
確認測試通過後,推送至 GitLab `dev` 分支即可自動觸發 CI/CD 流程。
|
|
342
211
|
|
|
343
|
-
|
|
344
|
-
const tableProps = useUdiTableSync({
|
|
345
|
-
// 配置選項...
|
|
346
|
-
});
|
|
212
|
+
**流程如下:**
|
|
347
213
|
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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
|
-
##
|
|
223
|
+
## Pre-push Hook 說明
|
|
389
224
|
|
|
390
|
-
|
|
225
|
+
Push 到 `dev` 分支時,husky pre-push hook 會自動執行以下動作:
|
|
391
226
|
|
|
392
|
-
|
|
227
|
+
| 情境 | 行為 |
|
|
228
|
+
|------|------|
|
|
229
|
+
| 一般 commit 推送到 `dev` | 執行測試 → 自動遞增 patch 版號 → 推送版號 commit → 觸發 CI/CD |
|
|
230
|
+
| 推送到非 `dev` 分支 | 只執行測試,不自動打版號 |
|
|
231
|
+
| 版號為 alpha/beta 時推送 | 自動切回正式版、合併至最近 commit,提示重新 push |
|
|
393
232
|
|
|
394
|
-
|
|
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
|
-
|
|
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
|
-
|
|
241
|
+
### npm Automation Token
|
|
418
242
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
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
|
-
|
|
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
|
-
|
|
253
|
+
需設定兩個 Variables:`NPM_TOKEN` 和 `CI_PUSH_TOKEN`
|
|
438
254
|
|
|
439
|
-
|
|
255
|
+
#### 設定 NPM_TOKEN
|
|
440
256
|
|
|
441
|
-
|
|
257
|
+
1. 進入 GitLab 專案 **udi / udi-package**
|
|
258
|
+
2. 左側選單 → **Settings** → **CI/CD** → **Variables** → **Add variable**
|
|
259
|
+
3. 填入:
|
|
442
260
|
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
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
|
-
|
|
269
|
+
1. GitLab 右上角頭像 → **Edit Profile** → **Access Tokens** → **Add new token**
|
|
270
|
+
2. 填入:
|
|
460
271
|
|
|
461
|
-
|
|
272
|
+
| 欄位 | 值 |
|
|
273
|
+
|------|----|
|
|
274
|
+
| Token name | `CI Push Token` |
|
|
275
|
+
| Expiration date | 設定一年後 |
|
|
276
|
+
| Scopes | ✅ `write_repository` |
|
|
462
277
|
|
|
463
|
-
|
|
464
|
-
|
|
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) |
|