@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.
Files changed (2) hide show
  1. package/README.md +246 -121
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,187 +1,312 @@
1
1
  # @udi-organization/udi-package
2
2
 
3
- UDI 共用元件套件,提供 `UdiTable`、`DateRangePicker` 等可重複使用的 React 元件。
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
- - **client(使用端)**:前端專案(如 imp-frontend 等)
6
- - **package(套件端)**:udi-package
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. `udi-package` 放在與前端專案同層目錄(Docker 鏡射 volume 時需要抓取固定路徑)
13
- ```
14
- ├── <前端專案>/
15
- └── udi-package/
16
- ```
17
- 2. 加入 npm 套件開發組織:
18
- 1. 建立 npm 帳號(使用公司 email 註冊)
19
- 2. 請管理員邀請至組織 `@udi-organization`
20
- 3. 執行 `npm login`
21
- 4. 登入後使用 `npm whoami` 確認
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
- ### 本地開發(link 模式)
75
+ ### Link 模式(本地即時開發)
29
76
 
30
- 1. **client 端**執行以下指令取得本地 package 連結並啟動開發伺服器:
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
- 2. **package 端**執行打包:
37
- ```bash
38
- # 單次打包
39
- npm run build
79
+ **套件端(udi-package):**
40
80
 
41
- # 或持續監聽自動打包
42
- npm run watch
43
- ```
44
- > `build` 使用 Rollup 編譯,輸出至 `dist/` 資料夾(包含 CJS 和 ESM 格式)。
45
- > client 端會透過 link 直接取得 `dist/` 資料夾的程式。
81
+ ```bash
82
+ # 持續監聽並自動編譯(推薦)
83
+ npm run watch
46
84
 
47
- 3. 若 package 有持續更動,可使用 `npm run watch` 持續監聽自動打包,或再次執行 `npm run build` 單次打包。
85
+ # 或單次編譯
86
+ npm run build
87
+ ```
48
88
 
49
- ### 發布測試版本
89
+ **客戶端(web-frontend):**
50
90
 
51
- 4. 開發完畢後,在 **package 端**執行:
52
- ```bash
53
- # 產生測試版號(可多次執行以遞增測試版號)
54
- npm run alpha
91
+ ```bash
92
+ # 切換至 link 模式並啟動開發伺服器
93
+ npm run dev-udi
55
94
 
56
- # 推送測試版本至 npm
57
- npm run alpha:publish
58
- ```
59
- > **測試版本無須推送至 GitLab。**
95
+ # 只切換至 link 模式,不啟動開發伺服器
96
+ npm run dev-udi-o
97
+ ```
60
98
 
61
- 5. `udi-package/package.json` 查看當前版號。
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
- 6. **client 端**安裝測試版本:
64
- ```bash
65
- npm install @udi-organization/udi-package@<對應版號> --legacy-peer-deps
66
- ```
105
+ > **注意**:link 模式會將 `@udi-organization/udi-package` 從 `package.json` 中移除,改用本地路徑作為依賴。**git push 前必須先切換回 release 模式。**
106
+
107
+ ---
67
108
 
68
- 7. 推上測試機測試。
109
+ ### Release 模式(使用 npm 正式版)
69
110
 
70
- ### 正式發布
111
+ 套件開發完畢、測試通過後,client 端切換回從 npm 取得套件。
71
112
 
72
- 8. 確認沒問題後推上 GitLab,並確認 CI/CD 是否正確執行。
73
- 9. CI/CD 正確執行後將會自動將正式版本推上 npm,無須再手動 release。
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
- | **Rollup** | 編譯出正式套件(`dist/index.cjs.js`、`dist/index.esm.js`) |
82
- | **Webpack** | 編譯套件本地的開發環境(`dev/main.jsx`),方便簡易測試更新 |
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
- ### package 端(udi-package)
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
- | `npm run dev` | 安裝最新 udi-package 並啟動開發伺服器(port 8068) |
109
- | `npm run dev-udi` | 使用 link 模式連結本地 udi-package 並啟動開發伺服器 |
110
- | `npm run dev-normal` | 直接啟動開發伺服器(不更新套件) |
111
- | `npm run get-udi` | 安裝最新 udi-package 並啟動開發伺服器 |
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
- ## Docker Sandbox 開發
164
+ ### 版號遞增規則
119
165
 
120
- - **run-sandbox**:在 sandbox 中新增 volume,建立本地的套件專案 udi-package
121
- - `udi-package` 資料夾需要與前端專案放在同一層
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
- ## Git Push 前注意事項(pre-push)
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
- 在 `git push` 時會先檢查目前是否為 **link 模式**。
195
+ ```bash
196
+ npm run beta
197
+ npm run beta:publish
198
+ ```
128
199
 
129
- 因為 link 模式會把 `@udi-organization/udi-package` 從 `package.json` 中移除,改為運行本地端的 udi-package 作為套件依賴。因此 **git push 以前需要切換回 release 模式**,把套件依賴改成 npm 官方下載的版本。
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
- ## CI/CD TOKEN 配置
208
+ ### 正式版(自動 CI/CD
134
209
 
135
- > 團隊中只要有一人設定即可。
210
+ 確認測試通過後,推送至 GitLab `dev` 分支即可自動觸發 CI/CD 流程。
136
211
 
137
- ### 1. 在 npm 上產生 Automation Token
212
+ **流程如下:**
138
213
 
139
- 1. 前往 [https://www.npmjs.com](https://www.npmjs.com) 並登入帳號
140
- 2. 點擊右上角頭像 **Access Tokens**(或直接前往 `https://www.npmjs.com/settings/<帳號名稱>/tokens`)
141
- 3. 點擊 **Generate New Token** → 選擇 **Classic Token**
142
- 4. 選擇 Token 類型:
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
- ### 2. GitLab 產生 Personal Access Token
219
+ > **注意**:若當前版號為 alpha/beta 預發布版本,pre-push hook 會先自動切回正式版號並合併至最近一次 commit,然後要求重新執行 `git push`。
150
220
 
151
- 1. 進入 GitLab → 右上角頭像 → **Edit Profile**
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
- 4. 點擊 **Create personal access token**
162
- 5. 立刻複製 token(格式如 `glpat-xxxxxxxxxxxxxxxxxxxx`)
225
+ Push `dev` 分支時,husky pre-push hook 會自動執行以下動作:
163
226
 
164
- ### 3. Token 加入專案 CI/CD Variables
227
+ | 情境 | 行為 |
228
+ |------|------|
229
+ | 一般 commit 推送到 `dev` | 執行測試 → 自動遞增 patch 版號 → 推送版號 commit → 觸發 CI/CD |
230
+ | 推送到非 `dev` 分支 | 只執行測試,不自動打版號 |
231
+ | 版號為 alpha/beta 時推送 | 自動切回正式版、合併至最近 commit,提示重新 push |
165
232
 
166
- 1. 進入 GitLab 專案 **udi / udi-package**
167
- 2. 左側選單 → **Settings** → **CI/CD**
168
- 3. 找到 **Variables** 區塊 → 點擊 **Expand**
169
- 4. 分別新增以下兩個變數:
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
- **NPM_TOKEN:**
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 | 貼上 npm Automation Token(`npm_xxxx...`) |
177
- | Type | `Variable` |
264
+ | Value | 上一步複製的 `npm_xxxx...` |
178
265
  | Flags | ✅ Mask variable、✅ Protect variable |
179
266
 
180
- **CI_PUSH_TOKEN:**
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 | 貼上 GitLab Personal Access Token(`glpat-xxxx...`) |
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) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@udi-organization/udi-package",
3
- "version": "1.0.77",
3
+ "version": "1.0.78",
4
4
  "description": "package for udi",
5
5
  "repository": {
6
6
  "type": "gitlab",