@udi-organization/udi-package 1.0.77 → 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 +246 -121
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,187 +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
|
-
|
|
5
|
+
UDI 共用元件套件,供各前端專案(client)使用。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 目錄
|
|
10
|
+
|
|
11
|
+
- [元件使用指南](#元件使用指南)
|
|
12
|
+
- [UdiTable](#uditable)
|
|
13
|
+
- [useUdiTableSync(兩表格同步)](#useuditable sync兩表格同步)
|
|
14
|
+
- [useUdiTableSyncMutipleTable(多表格同步)](#useuditablesyncmutipletable多表格同步)
|
|
15
|
+
- [專案結構](#專案結構)
|
|
16
|
+
- [前置作業](#前置作業)
|
|
17
|
+
- [開發流程](#開發流程)
|
|
18
|
+
- [Link 模式(本地即時開發)](#link-模式本地即時開發)
|
|
19
|
+
- [Release 模式(使用 npm 正式版)](#release-模式使用-npm-正式版)
|
|
20
|
+
- [版本資訊](#版本資訊)
|
|
21
|
+
- [版本發布](#版本發布)
|
|
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)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 元件使用指南
|
|
32
|
+
|
|
33
|
+
### 安裝與引入
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install @udi-organization/udi-package --legacy-peer-deps
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
import { UdiTable, useUdiTableSync, useUdiTableSyncMutipleTable } from '@udi-organization/udi-package';
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
## 專案結構
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
udi-package/ ← 套件端(本專案)
|
|
51
|
+
web-frontend/ ← 客戶端(前端專案)
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
> **重要**:`udi-package` 需與前端專案放在同一層目錄,Docker volume 映射時會依此固定路徑抓取。
|
|
7
55
|
|
|
8
56
|
---
|
|
9
57
|
|
|
10
58
|
## 前置作業
|
|
11
59
|
|
|
12
|
-
1.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
3. 在 GitLab 專案中加入 `CI_PUSH_TOKEN` 和 `NPM_TOKEN` 變數,以供 CI/CD 自動佈署(若團隊中已有配置可跳過,可至專案 Settings → CI/CD → Variables 查看)
|
|
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
|
+
```
|
|
68
|
+
|
|
69
|
+
2. **設定 CI/CD Token**(團隊中只需一人設定,詳見[下方說明](#cicd-設定))
|
|
23
70
|
|
|
24
71
|
---
|
|
25
72
|
|
|
26
73
|
## 開發流程
|
|
27
74
|
|
|
28
|
-
###
|
|
75
|
+
### Link 模式(本地即時開發)
|
|
29
76
|
|
|
30
|
-
|
|
31
|
-
```bash
|
|
32
|
-
npm run dev-udi
|
|
33
|
-
```
|
|
34
|
-
> 此指令會先卸載 npm 上的 `@udi-organization/udi-package`,接著透過 `npm link` 連結本地套件,最後啟動 webpack-dev-server。
|
|
77
|
+
在 `udi-package` 有持續變動時使用,client 端會直接讀取本地 `dist/` 資料夾。
|
|
35
78
|
|
|
36
|
-
|
|
37
|
-
```bash
|
|
38
|
-
# 單次打包
|
|
39
|
-
npm run build
|
|
79
|
+
**套件端(udi-package):**
|
|
40
80
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
> `build` 使用 Rollup 編譯,輸出至 `dist/` 資料夾(包含 CJS 和 ESM 格式)。
|
|
45
|
-
> client 端會透過 link 直接取得 `dist/` 資料夾的程式。
|
|
81
|
+
```bash
|
|
82
|
+
# 持續監聽並自動編譯(推薦)
|
|
83
|
+
npm run watch
|
|
46
84
|
|
|
47
|
-
|
|
85
|
+
# 或單次編譯
|
|
86
|
+
npm run build
|
|
87
|
+
```
|
|
48
88
|
|
|
49
|
-
|
|
89
|
+
**客戶端(web-frontend):**
|
|
50
90
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
npm run alpha
|
|
91
|
+
```bash
|
|
92
|
+
# 切換至 link 模式並啟動開發伺服器
|
|
93
|
+
npm run dev-udi
|
|
55
94
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
> **測試版本無須推送至 GitLab。**
|
|
95
|
+
# 只切換至 link 模式,不啟動開發伺服器
|
|
96
|
+
npm run dev-udi-o
|
|
97
|
+
```
|
|
60
98
|
|
|
61
|
-
|
|
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
|
|
62
104
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
```
|
|
105
|
+
> **注意**:link 模式會將 `@udi-organization/udi-package` 從 `package.json` 中移除,改用本地路徑作為依賴。**git push 前必須先切換回 release 模式。**
|
|
106
|
+
|
|
107
|
+
---
|
|
67
108
|
|
|
68
|
-
|
|
109
|
+
### Release 模式(使用 npm 正式版)
|
|
69
110
|
|
|
70
|
-
|
|
111
|
+
套件開發完畢、測試通過後,client 端切換回從 npm 取得套件。
|
|
71
112
|
|
|
72
|
-
|
|
73
|
-
|
|
113
|
+
**客戶端(web-frontend):**
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# 安裝最新版並啟動開發伺服器
|
|
117
|
+
npm run get-udi
|
|
118
|
+
|
|
119
|
+
# 只安裝最新版,不啟動開發伺服器
|
|
120
|
+
npm run get-udi-o
|
|
121
|
+
|
|
122
|
+
# 安裝指定版本(測試版或特定版本)
|
|
123
|
+
npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
|
|
124
|
+
```
|
|
74
125
|
|
|
75
126
|
---
|
|
76
127
|
|
|
77
|
-
##
|
|
128
|
+
## 版本資訊
|
|
78
129
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
130
|
+
### 當前版本
|
|
131
|
+
|
|
132
|
+
於 `package.json` 查看目前版號:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
node -p "require('./package.json').version"
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
或至 npm 查詢已發布的最新版本:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
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 # 完整版本列表
|
|
144
|
+
```
|
|
83
145
|
|
|
84
146
|
---
|
|
85
147
|
|
|
86
|
-
|
|
148
|
+
### 版號格式(SemVer)
|
|
87
149
|
|
|
88
|
-
|
|
150
|
+
本套件遵循 [語意化版本(Semantic Versioning)](https://semver.org/lang/zh-TW/):
|
|
89
151
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
| `npm run build` | 使用 Rollup 單次編譯出 `dist/` |
|
|
93
|
-
| `npm run watch` | 使用 Rollup 持續監聽並自動編譯 |
|
|
94
|
-
| `npm run dev` | 啟動 Webpack 本地開發伺服器(port 3000) |
|
|
95
|
-
| `npm run alpha` | 產生 alpha 測試版號 |
|
|
96
|
-
| `npm run alpha:publish` | 發布 alpha 測試版本至 npm |
|
|
97
|
-
| `npm run beta` | 產生 beta 測試版號 |
|
|
98
|
-
| `npm run beta:publish` | 發布 beta 測試版本至 npm |
|
|
99
|
-
| `npm run release` | 正式發布(patch 版號) |
|
|
100
|
-
| `npm run release-minor` | 正式發布(minor 版號) |
|
|
101
|
-
| `npm run release-major` | 正式發布(major 版號) |
|
|
102
|
-
| `npm test` | 執行測試 |
|
|
103
|
-
|
|
104
|
-
### client 端(前端專案)
|
|
152
|
+
```
|
|
153
|
+
major.minor.patch[-prerelease.N]
|
|
105
154
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
| `npm run get-udi-o` | 僅安裝最新 udi-package(不啟動伺服器) |
|
|
113
|
-
| `npm run dev-udi-o` | 僅建立 link 連結(不啟動伺服器) |
|
|
114
|
-
| `npm run commit:package` | 更新 udi-package 並自動 commit |
|
|
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 次
|
|
160
|
+
```
|
|
115
161
|
|
|
116
162
|
---
|
|
117
163
|
|
|
118
|
-
|
|
164
|
+
### 版號遞增規則
|
|
119
165
|
|
|
120
|
-
|
|
121
|
-
|
|
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` |
|
|
173
|
+
|
|
174
|
+
> 預發布版本(alpha/beta)推送至 GitLab `dev` 分支前,pre-push hook 會自動切回正式版號。
|
|
122
175
|
|
|
123
176
|
---
|
|
124
177
|
|
|
125
|
-
##
|
|
178
|
+
## 版本發布
|
|
179
|
+
|
|
180
|
+
### 測試版(Alpha / Beta)
|
|
181
|
+
|
|
182
|
+
開發中需要讓 client 端測試時,發布測試版本至 npm。**測試版無須推送至 GitLab。**
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# 步驟 1:產生測試版版號(可重複執行以遞增版號)
|
|
186
|
+
npm run alpha
|
|
187
|
+
# 範例:1.0.75 → 1.0.76-alpha.1 → 1.0.76-alpha.2
|
|
188
|
+
|
|
189
|
+
# 步驟 2:編譯並推送至 npm
|
|
190
|
+
npm run alpha:publish
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Beta 版同理:
|
|
126
194
|
|
|
127
|
-
|
|
195
|
+
```bash
|
|
196
|
+
npm run beta
|
|
197
|
+
npm run beta:publish
|
|
198
|
+
```
|
|
128
199
|
|
|
129
|
-
|
|
200
|
+
發布後,於 `package.json` 確認版號,並通知 client 端執行:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
npm install @udi-organization/udi-package@<版號> --legacy-peer-deps
|
|
204
|
+
```
|
|
130
205
|
|
|
131
206
|
---
|
|
132
207
|
|
|
133
|
-
|
|
208
|
+
### 正式版(自動 CI/CD)
|
|
134
209
|
|
|
135
|
-
|
|
210
|
+
確認測試通過後,推送至 GitLab `dev` 分支即可自動觸發 CI/CD 流程。
|
|
136
211
|
|
|
137
|
-
|
|
212
|
+
**流程如下:**
|
|
138
213
|
|
|
139
|
-
1.
|
|
140
|
-
2.
|
|
141
|
-
3.
|
|
142
|
-
|
|
143
|
-
- ❌ Publish — 手動發布用
|
|
144
|
-
- ✅ **Automation** — CI/CD 自動化用(選這個)
|
|
145
|
-
- ❌ Read-only — 只能讀取
|
|
146
|
-
5. 產生後立刻複製 token(格式如 `npm_xxxxxxxxxxxx`)
|
|
147
|
-
> ⚠️ 離開頁面後就看不到了!
|
|
214
|
+
1. 執行 `git push`(推送到 `dev` 分支)
|
|
215
|
+
2. Pre-push hook 自動執行測試,並遞增 patch 版號後推送
|
|
216
|
+
3. GitLab CI/CD 自動執行:
|
|
217
|
+
- 安裝依賴 → 執行測試 → 管理版號 → 編譯套件 → 發布至 npm
|
|
148
218
|
|
|
149
|
-
|
|
219
|
+
> **注意**:若當前版號為 alpha/beta 預發布版本,pre-push hook 會先自動切回正式版號並合併至最近一次 commit,然後要求重新執行 `git push`。
|
|
150
220
|
|
|
151
|
-
|
|
152
|
-
2. 左側選單 → **Access Tokens**
|
|
153
|
-
3. 點擊 **Add new token**,填入:
|
|
221
|
+
---
|
|
154
222
|
|
|
155
|
-
|
|
156
|
-
|------|-----|
|
|
157
|
-
| Token name | `CI Push Token` |
|
|
158
|
-
| Expiration date | 設一年後的日期 |
|
|
159
|
-
| Scopes | ✅ `write_repository` |
|
|
223
|
+
## Pre-push Hook 說明
|
|
160
224
|
|
|
161
|
-
|
|
162
|
-
5. 立刻複製 token(格式如 `glpat-xxxxxxxxxxxxxxxxxxxx`)
|
|
225
|
+
Push 到 `dev` 分支時,husky pre-push hook 會自動執行以下動作:
|
|
163
226
|
|
|
164
|
-
|
|
227
|
+
| 情境 | 行為 |
|
|
228
|
+
|------|------|
|
|
229
|
+
| 一般 commit 推送到 `dev` | 執行測試 → 自動遞增 patch 版號 → 推送版號 commit → 觸發 CI/CD |
|
|
230
|
+
| 推送到非 `dev` 分支 | 只執行測試,不自動打版號 |
|
|
231
|
+
| 版號為 alpha/beta 時推送 | 自動切回正式版、合併至最近 commit,提示重新 push |
|
|
165
232
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
233
|
+
> Hook 完成推送後會以 `exit 1` 結束,終端機會出現 error 訊息,**這是預期行為**,實際推送已成功完成,可忽略此錯誤。
|
|
234
|
+
|
|
235
|
+
---
|
|
236
|
+
|
|
237
|
+
## CI/CD 設定
|
|
238
|
+
|
|
239
|
+
> 團隊中只需一人設定,完成後所有成員皆可享有自動發布功能。
|
|
240
|
+
|
|
241
|
+
### npm Automation Token
|
|
242
|
+
|
|
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
|
+
> ⚠️ 離開頁面後無法再次查看,請立即複製
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
### GitLab CI/CD Variables
|
|
252
|
+
|
|
253
|
+
需設定兩個 Variables:`NPM_TOKEN` 和 `CI_PUSH_TOKEN`
|
|
254
|
+
|
|
255
|
+
#### 設定 NPM_TOKEN
|
|
170
256
|
|
|
171
|
-
|
|
257
|
+
1. 進入 GitLab 專案 **udi / udi-package**
|
|
258
|
+
2. 左側選單 → **Settings** → **CI/CD** → **Variables** → **Add variable**
|
|
259
|
+
3. 填入:
|
|
172
260
|
|
|
173
261
|
| 欄位 | 值 |
|
|
174
|
-
|
|
262
|
+
|------|----|
|
|
175
263
|
| Key | `NPM_TOKEN` |
|
|
176
|
-
| Value |
|
|
177
|
-
| Type | `Variable` |
|
|
264
|
+
| Value | 上一步複製的 `npm_xxxx...` |
|
|
178
265
|
| Flags | ✅ Mask variable、✅ Protect variable |
|
|
179
266
|
|
|
180
|
-
|
|
267
|
+
#### 設定 CI_PUSH_TOKEN(GitLab Personal Access Token)
|
|
268
|
+
|
|
269
|
+
1. GitLab 右上角頭像 → **Edit Profile** → **Access Tokens** → **Add new token**
|
|
270
|
+
2. 填入:
|
|
181
271
|
|
|
182
272
|
| 欄位 | 值 |
|
|
183
|
-
|
|
273
|
+
|------|----|
|
|
274
|
+
| Token name | `CI Push Token` |
|
|
275
|
+
| Expiration date | 設定一年後 |
|
|
276
|
+
| Scopes | ✅ `write_repository` |
|
|
277
|
+
|
|
278
|
+
3. 複製產生的 token(格式:`glpat-xxxxxxxxxxxxxxxxxxxx`)
|
|
279
|
+
4. 回到專案 **Settings** → **CI/CD** → **Variables** → **Add variable**,填入:
|
|
280
|
+
|
|
281
|
+
| 欄位 | 值 |
|
|
282
|
+
|------|----|
|
|
184
283
|
| Key | `CI_PUSH_TOKEN` |
|
|
185
|
-
| Value |
|
|
186
|
-
| Type | `Variable` |
|
|
284
|
+
| Value | 上方複製的 `glpat-xxxx...` |
|
|
187
285
|
| Flags | ✅ Mask variable、✅ Protect variable |
|
|
286
|
+
|
|
287
|
+
---
|
|
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) |
|