@freelog-cli/cli2 0.5.0 → 0.5.2

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.
@@ -0,0 +1,138 @@
1
+ # 按场景操作
2
+
3
+ 本页是决策入口:先判断资源是否已经在线上存在、是否已经发行过版本、当前工程是否已有 `.freelog/` 身份,再复制对应路径。不要把 `init`、`create`、`bind` 当成同义词:它们分别是立项、建线上资源壳、接入已有线上资源。需要解释命令语义时回到专题页;需要完整参数和副作用时查[完整命令参考](./10-命令参考.md)。
4
+
5
+ 所有例子以 `--env dev` 为例;多资源工程中,每一条涉及某资源的命令都补上 `--resource <selector>`;产物始终用 `--artifact <path>`。
6
+
7
+ ## 先选入口
8
+
9
+ | 你现在的情况 | 从这里开始 | 不要做 |
10
+ |---|---|---|
11
+ | 空目录,普通文件资源还未上线 | `init --type <最终叶子>`,再 `create` | 把父类型或类型名称交给 `--type`。 |
12
+ | 已有普通文件工程、没有线上资源 | `create --type <最终叶子> --artifact <文件>` | 为了建壳强行覆盖工程执行 `init`。 |
13
+ | 空目录,要从官方主题/插件模板开始 | `init theme|widget <目录> --template <id>` | 选择资源类型,或手工复制本地模板。 |
14
+ | 已有主题/插件工程、没有线上资源 | `create --type RT001|RT002 --artifact <dist|build>` | 对非空工程再执行 `init`,或自己先打 zip。 |
15
+ | 线上有自己的壳但没有发行版本 | `bind <资源ID或username/name> --artifact <文件或构建目录>`,再 `create-version` | 再次 `create`。 |
16
+ | 线上已有发行版本 | `bind <资源ID或username/name> --artifact <文件或构建目录>`,再 `version draft pull` 和 `update-version` | 用 `create-version` 再发 1.0.0。 |
17
+ | 已有本地身份和未提交工作稿 | `version show --local` 后继续编辑或丢稿 | 手工编辑工作稿 JSON。 |
18
+ | 同一工程有多份资源身份 | 先用 `status --resource file:N.json` 确认目标,再在后续命令沿用同一 `--resource` | 用 `--artifact`、标题或状态文件顺序猜测目标。 |
19
+ | 只改展示信息、策略或上下架 | 进入资源管理命令 | 为此创建新版本或新资源壳。 |
20
+
21
+ ## 场景一:从空目录发行普通文件首版
22
+
23
+ ```powershell
24
+ freelog-cli login --env dev
25
+ freelog-cli init . --type RT006003 --yes --env dev
26
+ freelog-cli create --title "我的视频" --name my-video --artifact video.mp4 --yes --env dev
27
+ freelog-cli create-version --prepare --env dev
28
+ freelog-cli version show --local --env dev
29
+ freelog-cli create-version --yes --env dev
30
+ ```
31
+
32
+ 不知道最终叶子 code 时,先运行 `type search <关键词>`,或省略 `init` 的 `--type` 进入层级、搜索和直接输入 code 的选择器。首版固定为 `1.0.0`。
33
+
34
+ ## 场景二:已有普通文件工程,创建首版资源
35
+
36
+ 不需要也不能为了写状态覆盖已有工程。登录后直接明确类型与文件:
37
+
38
+ ```powershell
39
+ freelog-cli login --env dev
40
+ freelog-cli create --title "已有视频" --name existing-video --type RT006003 --artifact video.mp4 --yes --env dev
41
+ freelog-cli create-version --prepare --env dev
42
+ freelog-cli create-version --yes --env dev
43
+ ```
44
+
45
+ `create` 只登记文件路径并创建资源壳;文件不存在、为空、过大或解析失败时,会在 `create-version` 停止,线上不会出现半个版本。
46
+
47
+ ## 场景三:从官方模板创建主题或插件并发行首版
48
+
49
+ ```powershell
50
+ freelog-cli login --env dev
51
+ freelog-cli template list
52
+ freelog-cli init theme my-theme --template vite-react-ts --yes
53
+ freelog-cli create --cwd my-theme --title "我的主题" --name my-theme --yes --env dev
54
+ # 在工程自己的流程中运行构建,得到 dist/
55
+ freelog-cli create-version --cwd my-theme --prepare --env dev
56
+ freelog-cli create-version --cwd my-theme --yes --env dev
57
+ ```
58
+
59
+ 插件把 `theme` 换为 `widget`;它的固定类型是 `RT002`,主题是 `RT001`。模板初始化后的建壳不传 `--type`,固定类型已在身份中。
60
+
61
+ ## 场景四:已有主题或插件工程,创建首版资源
62
+
63
+ 既有非空工程不运行 `init`,也没有必要补造模板元数据。明确其固定类型和构建目录:
64
+
65
+ ```powershell
66
+ freelog-cli login --env dev
67
+ freelog-cli create --title "已有主题" --name existing-theme --type RT001 --artifact dist --yes --env dev
68
+ # 自己完成构建后
69
+ freelog-cli create-version --prepare --env dev
70
+ freelog-cli create-version --yes --env dev
71
+ ```
72
+
73
+ 插件使用 `--type RT002`。`dist` / `build` 是目录;CLI 仅在提交前临时压缩其中内容,绝不把 zip 写进 `filePath`。
74
+
75
+ ## 场景五:自己的线上资源未发行,在本地补接后发首版
76
+
77
+ ```powershell
78
+ freelog-cli login --env dev
79
+ freelog-cli bind <resourceId或username/name> --artifact video.mp4 --env dev
80
+ freelog-cli create-version --prepare --env dev
81
+ freelog-cli create-version --yes --env dev
82
+ ```
83
+
84
+ 主题/插件把 `video.mp4` 换成 `dist` 或 `build`。`bind` 会从平台读取类型;对主题/插件,没有已记录目录时须传 `--artifact`。
85
+
86
+ ## 场景六:自己的线上资源已发行,在本地接入并发新版本
87
+
88
+ ```powershell
89
+ freelog-cli login --env dev
90
+ freelog-cli bind <resourceId或username/name> --artifact dist --env dev
91
+ freelog-cli version draft pull --env dev
92
+ # 编辑属性、可选配置、依赖或说明
93
+ freelog-cli update-version --bump patch --yes --env dev
94
+ ```
95
+
96
+ 普通文件把 `dist` 换成文件。使用 `--version 1.1.0` 也可以代替 `--bump patch`;两者不能同时传。若已有本地工作稿,先 `version show --local`,决定继续、`version draft discard`,或用 `version draft pull --yes` 明确覆盖。
97
+
98
+ ## 场景七:构建路径、工作稿或多资源工程发生变化
99
+
100
+ - 构建输出从 `dist` 变成 `build`:单份资源用 `version set --artifact build`;多份资源用 `version set --resource file:N.json --artifact build`。只更新记录,不上传也不提交。
101
+ - 文件或目录不存在:先恢复真实产物;CLI 不会复用旧 SHA1 发新版本。
102
+ - 一个工程中有多份身份:`create-version`、`update-version`、`version draft pull` 等既有资源操作传对应的 `--resource`;不传时 TTY 可选择,非交互会停止,不会猜第一份。`create`、`bind` 例外:它们可在没有未绑定状态时新增 `N.json`;要接续某份未绑定状态时传 `--resource file:N.json`。发版要换产物时再传 `--artifact`。
103
+ - 想从另一线上版本重新开始:`version draft pull --version <版本> --yes`;这会覆盖当前未提交工作稿,先看命令打印的摘要。
104
+
105
+ ## 场景八:版本表单、依赖和上线
106
+
107
+ 首版先 `create-version --prepare`,更新版先 `version draft pull`,之后再用 `version attr`、`version dep` 和 `version draft description` 编辑;仅当当前类型支持时才用 `version option`。依赖签约时从对方显示的**全部启用策略**中选择;签约成功后才写入工作稿。详情见 [版本工作稿](./04-版本工作稿.md)。
108
+
109
+ 展示信息、策略、上架和下架不属于版本工作稿;按 [资源管理](./05-资源管理.md) 单独操作。合集、批量资源、前端库/package 模板和支付不在本期单资源 CLI 范围内。
110
+
111
+ ## 场景九:只修改一个已发布版本的说明
112
+
113
+ 不需要建立工作稿,也不会产生新版本号:
114
+
115
+ ```powershell
116
+ freelog-cli version show --version 1.1.0 --env dev
117
+ freelog-cli version description --version 1.1.0 --description "补充发布说明" --env dev
118
+ ```
119
+
120
+ 这与 `version draft description` 不同:后者只修改尚未提交的更新稿。多资源工程在两条命令上都传相同的 `--resource file:N.json`。
121
+
122
+ ## 场景十:更新稿过期,选择重建或继续旧底
123
+
124
+ 线上 latest 已变化而本地稿仍基于旧版本时,通常重建最安全:
125
+
126
+ ```powershell
127
+ freelog-cli version show --local --env dev
128
+ freelog-cli version draft pull --yes --env dev
129
+ freelog-cli update-version --bump patch --yes --env dev
130
+ ```
131
+
132
+ 只有确认仍需按旧底提交时,才使用 `--reuse-version`,并让它与工作稿来源完全一致:
133
+
134
+ ```powershell
135
+ freelog-cli update-version --reuse-version 1.0.0 --version 1.1.0 --yes --env dev
136
+ ```
137
+
138
+ 若工作稿本身不要了,可把前两步改为 `update-version --reset --bump patch --yes`;它会删除当前稿后重新建立,不要把它当成无损刷新。
@@ -0,0 +1,95 @@
1
+ # 完整命令参考
2
+
3
+ 本页是发布包内的命令索引:列出当前 CLI 的全部公开命令、何时使用以及它会不会改变线上资源或本地文件。首次完成任务请优先看[按场景操作](./09-按场景操作.md);执行已知命令、编写脚本或排查影响时以本页为准。
4
+
5
+ 所有示例省略 `freelog-cli` 前缀后的公共参数。推荐每次显式传 `--env dev` 或 `--env test`;多资源工程的**常规单资源命令**要传 `--resource file:N.json`(交互终端可选择)。`create` / `bind` 可新增或接续身份,`resource sync` 不传选择器时批量同步标题,它们不是这条规则的反例而是不同的生命周期语义。`--yes` 只跳过交互确认,不会放宽校验。详细选择规则见[首页](./README.md#多资源工程先选身份再给产物)。
6
+
7
+ ## 发现命令与获得帮助
8
+
9
+ ```powershell
10
+ freelog-cli --help
11
+ freelog-cli version --help
12
+ freelog-cli policy template apply --help
13
+ freelog-cli --cli-version
14
+ ```
15
+
16
+ 顶层 `--help` 会打印安装包内本手册的绝对路径;子命令 `--help` 显示该命令当前支持的选项。脚本不要从帮助文本解析业务结果;需要稳定错误结构时使用 `--json`。
17
+
18
+ ## 账号、工程和类型
19
+
20
+ | 命令 | 何时使用 | 影响 |
21
+ |---|---|---|
22
+ | `login [--global]` | 登录当前工作区;脚本可用 `--login-name`、`--password-stdin --yes`。 | 将秘密写入系统凭据库,并写入工作区或全局选择器。 |
23
+ | `logout [--global]` | 切换账号或清除本地登录选择。 | 只清选择器及明确孤立的凭据;不删除工程或线上资源。 |
24
+ | `init [dir] [--type <叶子类型>]` | 在空目录创建普通资源的本地身份。 | 新建未绑定 `N.json`,不创建线上资源。 |
25
+ | `init theme <dir> [--template <id>]` | 从主题模板创建新工程。 | 固定主题类型 `RT001` 与默认构建目录 `dist`。 |
26
+ | `init widget <dir> [--template <id>]` | 从插件模板创建新工程。 | 固定插件类型 `RT002` 与默认构建目录 `dist`。 |
27
+ | `template list` | 查看可用于主题/插件初始化的模板。 | 只读。 |
28
+ | `type list` | 列出全部可用最终叶子类型。 | 只读,需要登录。 |
29
+ | `type search [关键词]` | 按名称筛选最终叶子类型。 | 只读,需要登录。 |
30
+ | `type info <类型编号>` | 确认某个类型编号及其名称链。 | 只读,需要登录。 |
31
+ | `type pick [--type <类型编号>]` | 以命令方式列出或确认一个最终叶子类型。通常 `init` 的交互选择已足够。 | 只读,需要登录。 |
32
+
33
+ ## 建立或接入资源身份
34
+
35
+ | 命令 | 何时使用 | 影响 |
36
+ |---|---|---|
37
+ | `create --title <标题> --name <短标识> [--type <叶子类型>] [--artifact <路径>]` | 线上还没有该资源壳时创建它。已有唯一未绑定身份时会接续它;没有未绑定身份时新增一份本地状态。 | 创建线上资源壳并写入 `resourceId`;只记录产物路径,不上传、不发版、不上架。 |
38
+ | `bind <资源ID或username/name> [--artifact <路径>] [--force --yes]` | 线上已有且属于当前账号的资源,需要接入本地工程。 | 从平台读取身份,写入或接续一份 `N.json`;不拉版本、不上传。 |
39
+ | `status` | 想同时确认选中资源的本地身份、工作稿和线上状态。 | 只读。 |
40
+ | `resource sync [--resource <selector>]` | 网页或其它机器改过标题,需要刷新本地标题。 | 不传选择器时批量按资源 ID 同步当前环境全部绑定身份的 `title`;传选择器时只同步一份。 |
41
+ | `version set --artifact <路径>` | 文件改名、构建目录从 `dist` 变成 `build`,只想更新默认路径。 | 只改选中 `N.json.filePath`;不上传、不提交。 |
42
+
43
+ `--name` 是当前账号命名空间中不可重复、创建后不可改的短标识;`--title` 是可修改且可重复的展示名称。创建后的标题用 `update --title` 修改;本地标题用 `resource sync` 对齐。
44
+
45
+ ## 版本:查看、工作稿与提交
46
+
47
+ | 命令 | 何时使用 | 影响 |
48
+ |---|---|---|
49
+ | `version show [--version <已发号>]` | 查看线上 latest 或指定已发行版本。 | 只读,不覆盖本地工作稿。 |
50
+ | `version show --local` | 查看未提交工作稿。 | 只读;没有工作稿会提示失败。 |
51
+ | `version draft pull [--version <已发号>]` | 已有线上版本,基于 latest 或指定版本建立更新稿。 | 写入 `N.version.json`;已有稿默认拒绝覆盖。 |
52
+ | `version draft pull --yes` | 明确放弃当前工作稿,重新拉取版本。 | 覆盖工作稿;先打印即将丢失的摘要。 |
53
+ | `version draft discard` | 明确放弃当前工作稿。 | 删除选中资源的 `N.version.json`;没有稿时安全退出。 |
54
+ | `version draft description --description <文本>` | 修改**更新工作稿**的版本说明。 | 只写工作稿;不发新版本。 |
55
+ | `version description --version <已发号> --description <文本>` | 修改一个**已发布版本**的说明,而不创建新版本。 | 唯一直接更新线上版本信息的命令;不写工作稿。 |
56
+ | `version attr add|set|rm|list` | 维护工作稿的自定义属性。 | 写操作只改工作稿;`list` 只读。 |
57
+ | `version option add|set|rm|list` | 维护工作稿的可选配置。 | 写操作只改工作稿;仅资源类型允许时可用。 |
58
+ | `version dep add|range|rm|list` | 维护工作稿中的依赖及版本范围。 | 写操作只改工作稿;首次签约可能产生独立平台授权动作。 |
59
+ | `create-version --prepare [--artifact <路径>]` | 尚无已发版本时上传分析并建立首版工作稿。 | 写工作稿,不提交线上版本。 |
60
+ | `create-version --yes [--artifact <路径>]` | 尚无已发版本时提交固定的 `1.0.0`。 | 上传并提交首版;成功后删除工作稿并回写有效产物路径。 |
61
+ | `create-version --reset ...` | 首版工作稿确认不要了,直接从空表重新走本次命令。 | 会立即丢弃工作稿,再继续准备或提交;后续失败不会恢复旧稿。 |
62
+ | `update-version --version <新号> --yes [--artifact <路径>]` | 已有线上版本,指定后续版本号并提交。 | 上传并提交新版本;成功后删除工作稿。 |
63
+ | `update-version --bump patch|minor|major --yes` | 已有线上版本,按 latest 自动计算新版本号。 | 与上条相同;不能和 `--version` 同用。 |
64
+ | `update-version --reuse-version <已发号> ...` | 工作稿的底不是当前 latest,且明确以该已发号为底提交。 | 只改变本次提交认可的底;工作稿来源必须匹配。 |
65
+ | `update-version --reset ...` | 当前更新稿确认不要了,要丢掉并按本次指定底重新拉取后继续。 | 会立即删除现有工作稿,再继续更新流程;后续失败不会恢复旧稿。 |
66
+
67
+ 首版只能使用 `create-version`,已有版本只能使用 `update-version`。`--artifact` 在发行命令中是本次上传的真实文件/构建目录;普通资源必须是文件,主题/插件必须是非空构建目录。不要把 `version draft description` 与 `version description` 混用:前者改未提交更新稿,后者改已发布版本。
68
+
69
+ 属性、配置和依赖的子命令都以工作稿为目标。没有工作稿时,已有线上版本先 `version draft pull`;首版要先 `create-version --prepare`。依赖在非交互模式还须明确 `--policy-id <策略ID> --yes`,CLI 不会代选对方策略。
70
+
71
+ ## 展示信息、策略与上下架
72
+
73
+ | 命令 | 何时使用 | 影响 |
74
+ |---|---|---|
75
+ | `update [--title] [--intro] [--cover] [--tags] --yes` | 只修改资源展示信息。 | 更新线上 listing;不发版、不改标识、不上下架。 |
76
+ | `policy list` | 查看当前资源的授权策略。 | 只读。 |
77
+ | `policy template list [--page <n> --page-size <n>]` | 查看当前资源类型可套用的策略模板。 | 只读。 |
78
+ | `policy template apply [templateId] [--name]` | 套用一条平台模板并启用。交互可选择;脚本必须给 `<templateId> --yes`。 | 新增并启用一条策略;不付款、不上架。 |
79
+ | `policy apply --from-file <路径> [--name] --yes` | 从策略文本或 JSON 文件新增策略。 | 新增并启用一条策略;策略语义由平台校验。 |
80
+ | `policy set --id <策略ID> --on|--off` | 启用或停用某条策略。 | 更新线上策略状态;已上架资源不能停用到零条启用策略。 |
81
+ | `validate --for online` | 上架前预检版本和策略条件。 | 只读。 |
82
+ | `online` | 资源有已发版本和至少一条启用策略后上架。 | 更新线上可用状态。 |
83
+ | `offline` | 暂停线上可用状态。 | 只下架,不删除版本、策略、资源或本地文件。 |
84
+
85
+ ## 脚本最小安全模板
86
+
87
+ 脚本必须显式选择环境;工程有多份状态时也必须显式选择资源。先做只读检查,再执行写操作:
88
+
89
+ ```powershell
90
+ freelog-cli status --cwd <工程> --resource file:2.json --env dev
91
+ freelog-cli version show --cwd <工程> --resource file:2.json --env dev
92
+ freelog-cli update-version --cwd <工程> --resource file:2.json --bump patch --yes --env dev
93
+ ```
94
+
95
+ 需要机器可读错误时追加 `--json`。不要在脚本中用 `title:<标题>` 作为唯一选择器,也不要依赖交互式选择。
@@ -0,0 +1,93 @@
1
+ # Freelog CLI 使用手册
2
+
3
+ 这是一套面向**一个资源一次一条命令**的 CLI:支持普通文件、主题和插件。一个工程可以保存多份独立资源身份,但除 `resource sync` 外,一条涉及资源的命令只会处理其中一份。本手册以“先按场景完成工作,再按命令查准确行为”为组织原则;无需阅读设计文档或源码。
4
+
5
+ 不在本期范围:合集、批量发行、前端库模板、支付、session 与 studio 多账号。
6
+
7
+ ## 先安装 CLI
8
+
9
+ CLI 要求 Node.js 20 或更高版本。确认版本后,用 npm 全局安装:
10
+
11
+ ```powershell
12
+ node --version
13
+ npm install --global @freelog-cli/cli2
14
+ freelog-cli --cli-version
15
+ ```
16
+
17
+ 若最后一条提示找不到 `freelog-cli`,先重新打开终端;仍无效时,检查 npm 的全局可执行目录是否已经加入 `PATH`。不要以仓库内的 `node packages/...` 命令替代正常使用方式,那只用于本项目开发。
18
+
19
+ 安装完成后运行:
20
+
21
+ ```powershell
22
+ freelog-cli --help
23
+ ```
24
+
25
+ 顶层帮助会打印这份本机手册的绝对路径。CLI 不会联网下载文档;发布包内自带完整手册。
26
+
27
+ ## 使用前先知道
28
+
29
+ 开始操作前请先明确两件事:
30
+
31
+ 1. 当前联调使用 `--env dev` 或 `--env test`;省略环境会按 `prod` 处理,而 prod 目前被 CLI 拦截。
32
+ 2. 所有命令都以 `--cwd <工程目录>`(或当前目录)定位工程和账号选择器;一个工程可管理多份独立资源状态。除 `create`、`bind` 和 `resource sync` 外,常规资源命令一次只操作一份:唯一状态可省略选择器,多份状态用 `--resource <selector>` 或 TTY 选择。`create` / `bind` 可以新增或接续身份,`resource sync` 不传选择器时批量同步标题。
33
+
34
+ 文档仅供阅读,不会在执行命令时修改工程状态。
35
+
36
+ ## 先按目标找入口
37
+
38
+ | 你的目标 | 阅读 |
39
+ |---|---|
40
+ | 第一次登录并发行一个普通文件 | [快速开始](./01-快速上手.md) |
41
+ | 先按自己所处的情形找到完整操作路径 | [按场景操作](./09-按场景操作.md) |
42
+ | 创建、发新版本、接入已有资源 | [资源生命周期](./02-日常路径.md) |
43
+ | 创建主题或插件并发布构建产物 | [主题与插件](./03-主题与插件.md) |
44
+ | 继续、覆盖或丢弃未提交的版本内容 | [版本工作稿](./04-版本工作稿.md) |
45
+ | 修改展示信息、策略和上下架 | [资源管理](./05-资源管理.md) |
46
+ | 命令失败后的处理方式 | [故障恢复](./06-常见情况与报错.md) |
47
+ | 环境、登录和本地文件 | [环境、登录与凭据](./07-环境与凭据.md) · [本地状态文件](./08-本地文件参考.md) |
48
+ | 已知命令、参数或脚本需求,想查准确前置条件和影响 | [完整命令参考](./10-命令参考.md) |
49
+
50
+ 阅读方式:第一次使用先走“快速开始”;已经有工程或资源时先看“按场景操作”;不确定一条命令会读写什么、脚本该带哪些参数时,直接查“完整命令参考”。专题文章解释原因和边界,命令参考负责完整性,两者不互相替代。
51
+
52
+ ## 先判断你处于哪一条路径
53
+
54
+ ```text
55
+ 普通文件:login → init . → create → create-version --prepare → create-version --yes
56
+ 主题/插件:login → init theme|widget . --template <id> → create → 构建产物 → create-version --yes
57
+ 已有资源:login → bind →(无线上版本则 create-version;有线上版本则 version draft pull → update-version)
58
+ ```
59
+
60
+ `init`、`create`、`bind` 不是同义词:`init` 只建本地身份,`create` 只建线上资源壳,`bind` 只接入已存在的线上资源。`create-version` 才提交首个 `1.0.0`,`update-version` 才提交后续版本。`version show --local` 看未提交工作稿;不带 `--local` 的 `version show` 看线上已发版本。
61
+
62
+ ## 通用参数
63
+
64
+ | 参数 | 含义 |
65
+ |---|---|
66
+ | `--env dev|test` | 选择联调环境。推荐每次显式传入。 |
67
+ | `--cwd <dir>` | 工程目录;决定 `.freelog/` 与工作区账号选择器的位置。 |
68
+ | `--resource <selector>` | 为常规单资源命令选择某一份本地身份:`file:N.json`、`id:<资源ID>`、`name:<短标识或username/name>` 或 `title:<标题>`。单份可省略;多份交互选择,非交互必须明确指定。`create` / `bind` 的新增或接续规则见下文。 |
69
+ | `--artifact <path>` | 当前选中资源的产物路径:`create` / `bind` 可记录默认路径;发版时表示本次上传路径;`version set` 只更新默认路径,绝不选择身份。 |
70
+ | `--yes` | 跳过交互确认;不会放宽校验。仅当命令明确支持时(如覆盖工作稿)才允许覆盖相应状态,绝不覆盖工程目录。 |
71
+ | `--json` | 将 CLI 错误输出为 `{ "code", "message" }`。 |
72
+
73
+ 新脚本只使用 `--type`,不要使用 `--resource-type`;后者仅为迁移期兼容别名,CLI 会给出弃用警告。`--scaffold`、`artifactMode`、`publish` 和 `release` 不存在于当前命令面。
74
+
75
+ ## 先记住四条规则
76
+
77
+ 1. `init` 只创建本地身份,`create` 只创建线上资源壳,`bind` 只接入已有线上资源;三者都不会上传或发布版本。
78
+ 2. 无线上版本时只能用 `create-version` 发布固定的 `1.0.0`;已有线上版本时只能用 `update-version --version ...` 或 `--bump ...`。
79
+ 3. 每次真实发版都会从当前文件或构建目录重新上传、分析;工作稿里的旧 SHA1 不能替代已丢失的产物。
80
+ 4. 主题/插件传构建目录,CLI 临时压缩目录内容;普通资源传单个文件。两类资源都不需要、也不能由用户先手工打 zip。
81
+
82
+ ## 多资源工程:先选身份,再给产物
83
+
84
+ 资源身份与产物路径是两件不同的事。`--resource` 选择要操作的 `N.json`,`--artifact` 只提供该资源本次或默认的文件/构建目录,不能用路径代替资源选择。
85
+
86
+ | 本地状态数量 | 常规资源命令(如 `status`、`update-version`、`policy list`) |
87
+ |---|---|
88
+ | 0 | 停止并提示先 `init`、`create` 或 `bind`。 |
89
+ | 1 | 自动选择,无需传 `--resource`。 |
90
+ | 多份,交互终端 | 显示文件名、标题、短标识、资源 ID、类型、产物路径和工作稿状态,选择后继续。 |
91
+ | 多份,脚本/`--yes` | 停止并列出可复制的 `file:N.json`;传 `--resource` 后重试。 |
92
+
93
+ 选择器优先级建议为 `file:N.json`(最稳定)→ `id:<资源ID>` → `name:<短标识或 username/name>`。`title:<标题>` 只能在标题唯一时使用:标题可改也可重复。`resource sync` 是唯一不传选择器就批量同步当前环境所有本地标题的资源命令。
package/package.json CHANGED
@@ -1,83 +1,45 @@
1
1
  {
2
2
  "name": "@freelog-cli/cli2",
3
- "version": "0.5.0",
4
- "description": "Freelog CLI — scaffold, publish, and manage Freelog resources",
3
+ "version": "0.5.2",
4
+ "description": "Freelog CLI",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "bin": {
8
8
  "freelog-cli": "./dist/bin/index.js"
9
9
  },
10
10
  "files": [
11
- "dist",
12
- "compat"
11
+ "dist"
13
12
  ],
14
- "exports": {
15
- ".": {
16
- "types": "./dist/index.d.ts",
17
- "import": "./dist/index.js"
18
- }
19
- },
20
13
  "engines": {
21
14
  "node": ">=20"
22
15
  },
23
16
  "scripts": {
24
- "dev": "tsdown --watch",
25
- "build": "tsdown && node ./scripts/postbuild.mjs",
26
- "test": "vitest run",
17
+ "dev": "tsup --watch",
18
+ "build": "tsup && node scripts/copy-usage-docs.mjs",
19
+ "test": "vitest run --maxWorkers=1 --minWorkers=1",
27
20
  "test:watch": "vitest",
28
21
  "typecheck": "tsc --noEmit",
29
- "check:compat": "node ./scripts/check-compat.mjs",
30
- "pack:dry-run": "npm pack --dry-run",
31
- "pub": "npm publish --registry=https://registry.npmjs.org/",
32
- "verify": "pnpm test && pnpm typecheck && pnpm i18n:audit && pnpm check:compat && pnpm build && pnpm pack:dry-run",
33
- "verify:scenarios": "pnpm build && node ./scripts/verify-scenarios.mjs --env dev",
34
- "verify:payload": "pnpm build && node ./scripts/verify-payload-parity.mjs --env dev",
35
- "verify:meta": "pnpm build && node ./scripts/verify-meta-api.mjs --env dev",
36
- "verify:console": "pnpm build && node ./scripts/verify-console-parity.mjs --env dev",
37
- "verify:cover": "pnpm build && node ./scripts/verify-cover-parity.mjs --env dev",
38
- "verify:collection": "pnpm build && node ./scripts/verify-collection-parity.mjs --env dev",
39
- "verify:batch": "pnpm build && node ./scripts/verify-batch-parity.mjs --env dev",
40
- "verify:properties-sync": "pnpm build && node ./scripts/verify-properties-sync.mjs --env dev",
41
- "verify:single-create": "pnpm build && node ./scripts/verify-single-create.mjs --env dev",
42
- "verify:create-batch": "pnpm build && node ./scripts/verify-create-batch.mjs --env dev",
43
- "verify:collection-attrs": "pnpm build && node ./scripts/verify-collection-attrs.mjs --env dev",
44
- "verify:console-forms": "node ./scripts/verify-console-form-contract.mjs",
45
- "verify:l3g-automated": "pnpm build && node ./scripts/verify-l3g-automated.mjs",
46
- "verify:l3h-automated": "pnpm build && node ./scripts/verify-l3h-automated.mjs",
47
- "verify:rss": "pnpm build && node ./scripts/verify-rss-parity.mjs",
48
- "verify:negative-gates": "pnpm build && node ./scripts/verify-negative-gates.mjs --env dev",
49
- "verify:batch-boundary": "pnpm build && node ./scripts/verify-batch-boundary.mjs --env dev",
50
- "verify:json-envelope": "pnpm build && node ./scripts/verify-json-envelope.mjs --env dev",
51
- "verify:chaos": "pnpm build && node ./scripts/verify-chaos.mjs --env dev",
52
- "verify:offline": "pnpm build && node ./scripts/verify-scenarios-offline.mjs",
53
- "verify:session-smoke": "pnpm build && node ./scripts/verify-session-smoke.mjs --env dev",
54
- "verify:template-registry": "node ./scripts/verify-template-registry.mjs",
55
- "verify:p6-parity": "pnpm build && node ./scripts/verify-p6-parity.mjs --env dev",
56
- "provision:frozen-fixture": "pnpm build && node ./scripts/provision-frozen-fixture.mjs --env dev",
57
- "verify:parity": "pnpm build && node ./scripts/verify-console-parity.mjs --env dev && node ./scripts/verify-collection-parity.mjs --env dev && node ./scripts/verify-collection-attrs.mjs --env dev && node ./scripts/verify-properties-sync.mjs --env dev && node ./scripts/verify-single-create.mjs --env dev && node ./scripts/verify-create-batch.mjs --env dev && node ./scripts/verify-cover-parity.mjs --env dev && node ./scripts/verify-batch-parity.mjs --env dev && node ./scripts/verify-payload-parity.mjs --env dev && node ./scripts/verify-meta-api.mjs --env dev",
58
- "i18n:audit": "node ./scripts/i18n-audit.mjs",
59
- "prepublishOnly": "pnpm --filter @freelog-cli/tools-lib2 build && pnpm verify && pnpm verify:template-registry"
22
+ "verify": "pnpm test && pnpm typecheck && pnpm build && pnpm verify:package",
23
+ "verify:package": "node scripts/verify-package.mjs",
24
+ "pack:dry-run": "pnpm build && npm pack --dry-run",
25
+ "release:check": "pnpm --filter @freelog-cli/tools-lib2 verify && pnpm verify && npm pack --dry-run",
26
+ "prepublishOnly": "pnpm release:check",
27
+ "release:publish": "npm publish"
60
28
  },
61
29
  "dependencies": {
62
- "@clack/prompts": "^0.11.0",
63
- "adm-zip": "^0.6.0",
64
- "citty": "^0.1.6",
65
- "consola": "^3.4.2",
66
- "ejs": "^3.1.10",
67
- "fs-extra": "^11.3.0",
68
- "ofetch": "^1.4.1",
30
+ "@inquirer/prompts": "^7.8.0",
31
+ "@napi-rs/keyring": "^2.0.0",
32
+ "archiver": "^7.0.1",
33
+ "commander": "^14.0.0",
69
34
  "semver": "^7.7.2",
70
- "yaml": "^2.8.0",
71
35
  "zod": "^3.25.76"
72
36
  },
73
37
  "devDependencies": {
74
38
  "@freelog-cli/tools-lib2": "workspace:^",
75
- "@types/adm-zip": "^0.5.8",
76
- "@types/ejs": "^3.1.5",
77
- "@types/fs-extra": "^11.0.4",
39
+ "@types/archiver": "^6.0.3",
78
40
  "@types/node": "^22.15.30",
79
41
  "@types/semver": "^7.7.0",
80
- "tsdown": "^0.22.14",
42
+ "tsup": "^8.5.0",
81
43
  "typescript": "^5.8.3",
82
44
  "vitest": "^3.2.3"
83
45
  },
@@ -1,44 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "cliVersion": "0.5.0",
4
- "defaultRuntime": "0.5",
5
- "runtimes": {
6
- "0.5": {
7
- "freelogRuntimeRange": "^5.0.7",
8
- "templates": {
9
- "vite-vue-ts": {
10
- "npmName": "@freelog-cli/template-vite-vue-ts",
11
- "version": "latest"
12
- },
13
- "vite-vue": {
14
- "npmName": "@freelog-cli/template-vite-vue",
15
- "version": "latest"
16
- },
17
- "vite-react-ts": {
18
- "npmName": "@freelog-cli/template-vite-react-ts",
19
- "version": "latest"
20
- },
21
- "vite-react": {
22
- "npmName": "@freelog-cli/template-vite-react",
23
- "version": "latest"
24
- }
25
- }
26
- }
27
- },
28
- "noRuntime": {
29
- "templates": {
30
- "package-js": {
31
- "npmName": "@freelog-cli/template-package-js",
32
- "version": "0.5.0"
33
- },
34
- "package-react": {
35
- "npmName": "@freelog-cli/template-package-react",
36
- "version": "0.5.0"
37
- },
38
- "package-vue": {
39
- "npmName": "@freelog-cli/template-package-vue",
40
- "version": "0.5.0"
41
- }
42
- }
43
- }
44
- }
@@ -1 +0,0 @@
1
- export {}