sparrow-ci 1.3.0 → 1.4.0

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 (24) hide show
  1. package/.qoder/repowiki/zh/content//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203//345/221/275/344/273/244/344/275/277/347/224/250/347/244/272/344/276/213.md +423 -0
  2. package/.qoder/repowiki/zh/content//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203//345/221/275/344/273/244/346/225/205/351/232/234/346/216/222/351/231/244.md +497 -0
  3. package/.qoder/repowiki/zh/content//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203.md +388 -0
  4. package/.qoder/repowiki/zh/content//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203//345/237/272/347/241/200/345/221/275/344/273/244.md +379 -0
  5. package/.qoder/repowiki/zh/content//345/221/275/344/273/244/350/241/214/345/217/202/350/200/203//351/253/230/347/272/247/345/221/275/344/273/244.md +368 -0
  6. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//344/273/243/347/240/201/347/273/223/346/236/204/350/257/264/346/230/216.md +454 -0
  7. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//345/274/200/345/217/221/347/216/257/345/242/203/346/220/255/345/273/272.md +368 -0
  8. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227.md +368 -0
  9. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//346/211/251/345/261/225/345/274/200/345/217/221/346/214/207/345/215/227.md +564 -0
  10. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//350/260/203/350/257/225/344/270/216/346/265/213/350/257/225.md +490 -0
  11. package/.qoder/repowiki/zh/content//345/274/200/345/217/221/350/200/205/346/214/207/345/215/227//351/241/271/347/233/256/346/236/266/346/236/204/350/256/276/350/256/241.md +381 -0
  12. package/.qoder/repowiki/zh/content//345/277/253/351/200/237/345/274/200/345/247/213.md +345 -0
  13. package/.qoder/repowiki/zh/content//346/225/205/351/232/234/346/216/222/351/231/244.md +412 -0
  14. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275/NPM /346/236/204/345/273/272/347/263/273/347/273/237.md" +292 -0
  15. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275//344/273/243/347/240/201/344/270/212/344/274/240/346/234/215/345/212/241.md +372 -0
  16. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275//346/234/272/345/231/250/344/272/272/350/264/246/345/217/267/347/256/241/347/220/206.md +340 -0
  17. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275//346/240/270/345/277/203/345/212/237/350/203/275.md +459 -0
  18. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275//347/216/257/345/242/203/347/256/241/347/220/206/347/263/273/347/273/237.md +336 -0
  19. package/.qoder/repowiki/zh/content//346/240/270/345/277/203/345/212/237/350/203/275//351/242/204/350/247/210/347/224/237/346/210/220/345/212/237/350/203/275.md +314 -0
  20. package/.qoder/repowiki/zh/content//351/205/215/347/275/256/346/214/207/345/215/227.md +426 -0
  21. package/.qoder/repowiki/zh/content//351/241/271/347/233/256/346/246/202/350/277/260.md +364 -0
  22. package/.qoder/repowiki/zh/meta/repowiki-metadata.json +1 -0
  23. package/ci.config.js +4 -1
  24. package/package.json +1 -1
@@ -0,0 +1,423 @@
1
+ # 命令使用示例
2
+
3
+ <cite>
4
+ **本文引用的文件**
5
+ - [README.md](file://README.md)
6
+ - [package.json](file://package.json)
7
+ - [ci.config.js](file://ci.config.js)
8
+ - [bin/main.js](file://bin/main.js)
9
+ - [bin/ci.js](file://bin/ci.js)
10
+ - [bin/command/index.js](file://bin/command/index.js)
11
+ - [bin/utils/index.js](file://bin/utils/index.js)
12
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js)
13
+ - [git_tag.sh](file://git_tag.sh)
14
+ - [git.sh](file://git.sh)
15
+ </cite>
16
+
17
+ ## 目录
18
+ 1. [简介](#简介)
19
+ 2. [项目结构](#项目结构)
20
+ 3. [核心组件](#核心组件)
21
+ 4. [架构总览](#架构总览)
22
+ 5. [详细组件分析](#详细组件分析)
23
+ 6. [依赖关系分析](#依赖关系分析)
24
+ 7. [性能与稳定性建议](#性能与稳定性建议)
25
+ 8. [故障排查指南](#故障排查指南)
26
+ 9. [结论](#结论)
27
+ 10. [附录:命令速查与最佳实践](#附录命令速查与最佳实践)
28
+
29
+ ## 简介
30
+ 本文件面向首次使用与进阶使用者,提供从入门到精通的完整命令使用示例,覆盖首次配置、日常开发工作流、生产发布流程、多环境管理策略等典型场景。每个示例均给出命令序列、预期输出要点与常见问题的定位与解决思路,并总结命令组合的最佳实践(如上传前的预检清单、构建优化、版本管理策略),同时为不同角色(开发者、运维、项目经理)提供关注点与操作建议。
31
+
32
+ ## 项目结构
33
+ 该 CLI 工具围绕“命令入口 -> 业务控制器 -> 命令实现 -> 工具函数”的层次化设计组织,核心文件如下:
34
+ - 命令入口:解析命令行参数并调度业务控制器
35
+ - 业务控制器:封装 CI 生命周期(初始化、上传、预览、构建、切换环境、克隆、机器人切换、帮助)
36
+ - 命令实现:对接 miniprogram-ci 完成上传、预览、npm 构建
37
+ - 工具模块:通用 IO、版本处理、进度提示、文件夹复制等
38
+
39
+ ```mermaid
40
+ graph TB
41
+ subgraph "命令层"
42
+ M["bin/main.js<br/>解析参数并调度"]
43
+ end
44
+ subgraph "业务控制层"
45
+ C["bin/ci.js<br/>Ci 类:初始化/上传/预览/构建/切换/克隆/机器人/帮助"]
46
+ end
47
+ subgraph "命令实现层"
48
+ CMD["bin/command/index.js<br/>uploadCi/previewCi/packNpm*"]
49
+ end
50
+ subgraph "工具层"
51
+ U1["bin/utils/index.js<br/>通用工具"]
52
+ U2["bin/utils/node_utils.js<br/>文件/进程/复制"]
53
+ end
54
+ CFG["ci.config.js<br/>全局配置"]
55
+ M --> C
56
+ C --> CMD
57
+ C --> U1
58
+ C --> U2
59
+ C --> CFG
60
+ CMD --> CFG
61
+ ```
62
+
63
+ 图表来源
64
+ - [bin/main.js](file://bin/main.js#L1-L63)
65
+ - [bin/ci.js](file://bin/ci.js#L1-L366)
66
+ - [bin/command/index.js](file://bin/command/index.js#L1-L183)
67
+ - [bin/utils/index.js](file://bin/utils/index.js#L1-L222)
68
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L1-L177)
69
+ - [ci.config.js](file://ci.config.js#L1-L48)
70
+
71
+ 章节来源
72
+ - [README.md](file://README.md#L1-L81)
73
+ - [package.json](file://package.json#L1-L23)
74
+ - [bin/main.js](file://bin/main.js#L1-L63)
75
+ - [bin/ci.js](file://bin/ci.js#L1-L366)
76
+ - [bin/command/index.js](file://bin/command/index.js#L1-L183)
77
+ - [bin/utils/index.js](file://bin/utils/index.js#L1-L222)
78
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L1-L177)
79
+ - [ci.config.js](file://ci.config.js#L1-L48)
80
+
81
+ ## 核心组件
82
+ - 命令入口与参数解析:通过 commander 注册选项,解析并分发到 Ci 控制器
83
+ - 业务控制器 Ci:负责初始化、读写 cli.js、环境切换、上传/预览/构建/克隆/机器人切换/帮助
84
+ - 命令实现:封装 miniprogram-ci 的上传、预览、npm 构建逻辑,带进度反馈
85
+ - 工具模块:版本格式化、文件读写、依赖安装、文件夹复制、执行外部脚本等
86
+
87
+ 章节来源
88
+ - [bin/main.js](file://bin/main.js#L14-L62)
89
+ - [bin/ci.js](file://bin/ci.js#L21-L366)
90
+ - [bin/command/index.js](file://bin/command/index.js#L17-L182)
91
+ - [bin/utils/index.js](file://bin/utils/index.js#L36-L222)
92
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L24-L177)
93
+
94
+ ## 架构总览
95
+ 下面的序列图展示了“上传”命令从入口到上传完成的关键调用链路。
96
+
97
+ ```mermaid
98
+ sequenceDiagram
99
+ participant User as "用户"
100
+ participant Main as "bin/main.js"
101
+ participant CI as "bin/ci.js"
102
+ participant CMD as "bin/command/index.js"
103
+ participant MP as "miniprogram-ci"
104
+ User->>Main : "ci --upload"
105
+ Main->>CI : "new Ci().init()"
106
+ CI->>CI : "检查/创建 cli.js<br/>读取/写入配置"
107
+ Main->>CI : "ci.upload()"
108
+ CI->>CMD : "uploadCi(params)"
109
+ CMD->>MP : "ci.upload(...)"
110
+ MP-->>CMD : "进度回调/结果"
111
+ CMD-->>CI : "完成"
112
+ CI-->>User : "打印上传结果/二维码链接"
113
+ ```
114
+
115
+ 图表来源
116
+ - [bin/main.js](file://bin/main.js#L27-L62)
117
+ - [bin/ci.js](file://bin/ci.js#L267-L301)
118
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
119
+
120
+ 章节来源
121
+ - [bin/main.js](file://bin/main.js#L27-L62)
122
+ - [bin/ci.js](file://bin/ci.js#L267-L301)
123
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
124
+
125
+ ## 详细组件分析
126
+
127
+ ### 组件一:命令入口与参数分发
128
+ - 功能要点
129
+ - 注册选项:上传、预览、切换环境、npm 构建、克隆、机器人、帮助
130
+ - 初始化 Ci 实例并等待初始化完成
131
+ - 根据参数分支调用对应方法
132
+ - 关键行为
133
+ - 默认输出帮助
134
+ - 支持组合参数(例如在线发布代码开关)
135
+
136
+ 章节来源
137
+ - [bin/main.js](file://bin/main.js#L14-L62)
138
+
139
+ ### 组件二:业务控制器 Ci(初始化与配置)
140
+ - 初始化流程
141
+ - 读取项目配置,解析 appid、miniprogramRoot、app.json、分包信息
142
+ - 检查并创建独立分包目录
143
+ - 检查/创建 cli.js 并写入默认配置
144
+ - 安装依赖并执行 npm 构建
145
+ - 配置读写
146
+ - 读取/写入 cli.js,支持环境、版本、描述、项目根路径、机器人编号
147
+ - 在线发布时从 git tag 读取版本与描述
148
+ - 交互式问答
149
+ - 通过 inquirer 弹窗收集环境、版本、描述等必要信息
150
+
151
+ ```mermaid
152
+ flowchart TD
153
+ Start(["初始化入口"]) --> ReadCfg["读取 project.config.json/app.json"]
154
+ ReadCfg --> CheckCli{"cli.js 是否存在?"}
155
+ CheckCli --> |否| CreateCli["创建 cli.js 并写入默认配置"]
156
+ CreateCli --> InstallDeps["安装依赖"]
157
+ InstallDeps --> BuildNpm["执行 npm 构建"]
158
+ BuildNpm --> DoneInit["初始化完成"]
159
+ CheckCli --> |是| CopyToSub["复制 cli.js 到独立分包"]
160
+ CopyToSub --> ReadCli["读取 cli.js 并同步到实例"]
161
+ ReadCli --> DoneInit
162
+ ```
163
+
164
+ 图表来源
165
+ - [bin/ci.js](file://bin/ci.js#L56-L86)
166
+ - [bin/ci.js](file://bin/ci.js#L117-L139)
167
+ - [bin/ci.js](file://bin/ci.js#L142-L146)
168
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L74-L100)
169
+ - [bin/ci.js](file://bin/ci.js#L304-L313)
170
+
171
+ 章节来源
172
+ - [bin/ci.js](file://bin/ci.js#L56-L86)
173
+ - [bin/ci.js](file://bin/ci.js#L117-L146)
174
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L24-L100)
175
+
176
+ ### 组件三:上传命令(uploadCi)
177
+ - 行为特征
178
+ - 读取版本、描述、机器人编号
179
+ - 调用 miniprogram-ci 上传,启用压缩、条件编译等设置
180
+ - 进度回调:进行中/完成状态提示
181
+ - 成功后打印各分包大小统计
182
+ - 错误处理
183
+ - 失败时输出错误信息并标记失败
184
+
185
+ ```mermaid
186
+ sequenceDiagram
187
+ participant CI as "bin/ci.js"
188
+ participant CMD as "bin/command/index.js"
189
+ participant MP as "miniprogram-ci"
190
+ CI->>CMD : "uploadCi(params)"
191
+ CMD->>MP : "ci.upload(setting, robot)"
192
+ MP-->>CMD : "onProgressUpdate(status)"
193
+ CMD-->>CI : "返回 subPackageInfo"
194
+ CI-->>CI : "打印分包大小统计"
195
+ ```
196
+
197
+ 图表来源
198
+ - [bin/ci.js](file://bin/ci.js#L267-L301)
199
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
200
+
201
+ 章节来源
202
+ - [bin/ci.js](file://bin/ci.js#L267-L301)
203
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
204
+
205
+ ### 组件四:预览命令(previewCi)
206
+ - 行为特征
207
+ - 生成体验版二维码图片,支持指定页面、查询参数、场景值
208
+ - 进度回调提示生成中/完成
209
+ - 注意事项
210
+ - 命令行中 & 需要转义为 \&
211
+
212
+ 章节来源
213
+ - [bin/ci.js](file://bin/ci.js#L315-L325)
214
+ - [bin/command/index.js](file://bin/command/index.js#L135-L175)
215
+
216
+ ### 组件五:npm 构建(packNpmCi / packNpmListCi)
217
+ - 行为特征
218
+ - 单项目:根据 package.json 与 miniprogramRoot 手动打包
219
+ - 多项目:按配置中的 packNpmRelationList 并行打包
220
+ - 输出构建数量与告警列表
221
+ - 适用场景
222
+ - 依赖较多或多子项目时提升效率
223
+
224
+ 章节来源
225
+ - [bin/ci.js](file://bin/ci.js#L304-L313)
226
+ - [bin/command/index.js](file://bin/command/index.js#L72-L133)
227
+
228
+ ### 组件六:环境切换与机器人切换
229
+ - 环境切换
230
+ - 交互式选择 DEV/PRO,写回 cli.js 并提示成功
231
+ - 机器人切换
232
+ - 支持按名称映射到机器人编号,写回 cli.js 并提示成功
233
+
234
+ 章节来源
235
+ - [bin/ci.js](file://bin/ci.js#L332-L347)
236
+ - [bin/ci.js](file://bin/ci.js#L349-L356)
237
+ - [ci.config.js](file://ci.config.js#L15-L22)
238
+
239
+ ### 组件七:克隆文件夹(独立分包复制)
240
+ - 行为特征
241
+ - 将源目录集合复制到每个独立分包的目标位置
242
+ - 适用场景
243
+ - 统一资源/工具库在多分包间复用
244
+
245
+ 章节来源
246
+ - [bin/ci.js](file://bin/ci.js#L327-L330)
247
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L117-L168)
248
+ - [ci.config.js](file://ci.config.js#L28-L29)
249
+
250
+ ### 组件八:帮助与全局配置
251
+ - 帮助
252
+ - 输出帮助描述,包含各命令简写与作用
253
+ - 全局配置
254
+ - 环境枚举、机器人映射、直播插件地址/列表、源目录集合、帮助描述
255
+
256
+ 章节来源
257
+ - [bin/ci.js](file://bin/ci.js#L358-L362)
258
+ - [ci.config.js](file://ci.config.js#L10-L47)
259
+
260
+ ## 依赖关系分析
261
+ - 外部依赖
262
+ - miniprogram-ci:小程序上传/预览/构建的核心能力
263
+ - commander/inquirer/ora/chalk/log-symbols:命令行参数解析、交互、进度与颜色输出
264
+ - 内部依赖
265
+ - bin/main.js 依赖 bin/ci.js
266
+ - bin/ci.js 依赖 bin/command/index.js 与 bin/utils/*
267
+ - bin/command/index.js 依赖 ci.config.js 与工具函数
268
+
269
+ ```mermaid
270
+ graph LR
271
+ P["package.json<br/>bin 映射"] --> MAIN["bin/main.js"]
272
+ MAIN --> CI["bin/ci.js"]
273
+ CI --> CMD["bin/command/index.js"]
274
+ CI --> U["bin/utils/*.js"]
275
+ CMD --> CFG["ci.config.js"]
276
+ CI --> CFG
277
+ ```
278
+
279
+ 图表来源
280
+ - [package.json](file://package.json#L6-L8)
281
+ - [bin/main.js](file://bin/main.js#L11-L12)
282
+ - [bin/ci.js](file://bin/ci.js#L14-L17)
283
+ - [bin/command/index.js](file://bin/command/index.js#L10-L15)
284
+ - [ci.config.js](file://ci.config.js#L1-L48)
285
+
286
+ 章节来源
287
+ - [package.json](file://package.json#L1-L23)
288
+ - [bin/main.js](file://bin/main.js#L11-L12)
289
+ - [bin/ci.js](file://bin/ci.js#L14-L17)
290
+ - [bin/command/index.js](file://bin/command/index.js#L10-L15)
291
+ - [ci.config.js](file://ci.config.js#L1-L48)
292
+
293
+ ## 性能与稳定性建议
294
+ - 构建优化
295
+ - 使用多项目并行打包(packNpmListCi)减少等待时间
296
+ - 合理配置 packNpmRelationList,避免重复构建
297
+ - 上传稳定性
298
+ - 保持微信开发者工具服务端口开启
299
+ - 确保私钥路径正确,避免上传失败
300
+ - 版本管理
301
+ - 使用 git tag 作为版本来源,结合在线发布流程自动化
302
+ - 日志与可观测性
303
+ - 上传/预览均带有进度回调,便于监控耗时与异常
304
+
305
+ [本节为通用建议,不直接分析具体文件]
306
+
307
+ ## 故障排查指南
308
+ - 无法找到命令
309
+ - 若仅在项目内安装,请使用 npx 前缀调用
310
+ - 上传失败
311
+ - 检查微信开发者工具服务端口是否开启
312
+ - 确认私钥路径与机器人编号
313
+ - 查看进度回调中的错误信息
314
+ - npm 构建无效果
315
+ - 确认版本号为三位格式(工具会做格式化处理)
316
+ - 检查 packNpmRelationList 是否正确配置
317
+ - 依赖安装失败
318
+ - 确认 package.json 存在且网络正常
319
+ - 预览参数无效
320
+ - 注意命令行中 & 需要转义为 \&
321
+ - 在线发布版本/描述不正确
322
+ - 确认 git tag 输出格式符合预期,工具会解析首条 tag 的版本与描述
323
+
324
+ 章节来源
325
+ - [README.md](file://README.md#L16-L34)
326
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
327
+ - [bin/command/index.js](file://bin/command/index.js#L135-L175)
328
+ - [bin/utils/index.js](file://bin/utils/index.js#L28-L34)
329
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L74-L100)
330
+ - [bin/ci.js](file://bin/ci.js#L240-L263)
331
+
332
+ ## 结论
333
+ 本 CLI 工具通过清晰的分层设计与完善的命令集,覆盖了小程序 CI 的上传、预览、构建、环境与机器人管理等关键环节。配合版本与多项目构建策略,可在团队协作中显著提升效率与一致性。建议在团队内统一使用本指南中的示例流程与最佳实践,确保跨角色协作顺畅。
334
+
335
+ [本节为总结性内容,不直接分析具体文件]
336
+
337
+ ## 附录:命令速查与最佳实践
338
+
339
+ ### 角色关注点
340
+ - 开发者
341
+ - 日常上传、预览、npm 构建、环境切换、机器人切换
342
+ - 运维
343
+ - 依赖安装、私钥路径、上传/预览权限、日志与进度监控
344
+ - 项目经理
345
+ - 版本与描述规范、在线发布流程、多环境策略
346
+
347
+ ### 示例场景与命令序列
348
+
349
+ - 首次使用配置
350
+ - 步骤
351
+ - 初始化:执行命令触发初始化(创建 cli.js、安装依赖、构建 npm)
352
+ - 验证:确认 cli.js 内容与项目根路径、环境、版本、描述、机器人编号
353
+ - 参考命令
354
+ - ci --upload(首次会触发初始化)
355
+ - ci --build-npm
356
+ - 预期输出
357
+ - 初始化完成后提示“初始化完成”
358
+ - 构建成功后输出构建数量与告警列表
359
+ - 常见问题
360
+ - 未安装依赖导致构建失败:先执行依赖安装流程
361
+ - 私钥路径错误导致上传失败:检查私钥所在目录
362
+
363
+ - 日常开发工作流
364
+ - 步骤
365
+ - 切换环境:选择 DEV/PRO
366
+ - 修改版本与描述:交互式输入
367
+ - 上传:执行上传命令
368
+ - 预览:生成体验版二维码
369
+ - 参考命令
370
+ - ci --switch
371
+ - ci --upload
372
+ - ci --preview
373
+ - 预期输出
374
+ - 环境切换成功提示
375
+ - 上传完成后提示可在管理后台选择体验版
376
+ - 预览完成后生成二维码图片
377
+
378
+ - 生产环境发布流程
379
+ - 步骤
380
+ - 从 git tag 读取版本与描述
381
+ - 使用在线发布开关自动切换机器人并上传
382
+ - 上传完成后在管理后台选择体验版
383
+ - 参考命令
384
+ - ci --online-publish-code
385
+ - git_tag.sh(辅助读取最新 tag)
386
+ - 预期输出
387
+ - 在线发布流程自动写入版本与描述
388
+ - 上传成功后输出分包大小统计
389
+
390
+ - 多环境管理策略
391
+ - 步骤
392
+ - 通过 --switch 在 DEV/PRO 之间切换
393
+ - 通过 --robot 指定不同机器人编号
394
+ - 参考命令
395
+ - ci --switch
396
+ - ci --robot 名称
397
+ - 预期输出
398
+ - 环境切换成功提示
399
+ - 机器人切换成功提示
400
+
401
+ - 命令组合最佳实践
402
+ - 上传前预检清单
403
+ - 确认微信开发者工具服务端口开启
404
+ - 确认私钥路径与机器人编号
405
+ - 确认版本号为三位格式
406
+ - 构建优化技巧
407
+ - 使用多项目并行打包
408
+ - 合理配置 packNpmRelationList
409
+ - 版本管理策略
410
+ - 使用 git tag 作为版本来源,结合在线发布流程
411
+ - 预览参数中的 & 需要转义为 \&
412
+
413
+ 章节来源
414
+ - [README.md](file://README.md#L16-L34)
415
+ - [bin/main.js](file://bin/main.js#L14-L23)
416
+ - [bin/ci.js](file://bin/ci.js#L332-L356)
417
+ - [bin/ci.js](file://bin/ci.js#L240-L263)
418
+ - [bin/command/index.js](file://bin/command/index.js#L29-L69)
419
+ - [bin/command/index.js](file://bin/command/index.js#L135-L175)
420
+ - [bin/utils/index.js](file://bin/utils/index.js#L28-L34)
421
+ - [bin/utils/node_utils.js](file://bin/utils/node_utils.js#L74-L100)
422
+ - [ci.config.js](file://ci.config.js#L15-L22)
423
+ - [git_tag.sh](file://git_tag.sh#L1-L10)