@wwkit/opm 1.0.15 → 1.0.16
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 +1 -8
- package/docs/managers/apt.md +0 -1
- package/docs/managers/brew.md +0 -4
- package/docs/managers/bun.md +0 -2
- package/docs/managers/composer.md +0 -4
- package/docs/managers/dnf.md +0 -1
- package/docs/managers/npm.md +0 -4
- package/docs/managers/pip.md +0 -4
- package/docs/opm.html +8 -21
- package/docs/test/linux-environment-test-report.md +0 -1
- package/package.json +2 -2
- package/src/cli/groups/package.js +30 -10
- package/src/cli/index.js +1 -1
- package/src/managers/apt.js +0 -17
- package/src/managers/base.js +0 -15
- package/src/managers/brew.js +0 -32
- package/src/managers/bun.js +0 -24
- package/src/managers/composer.js +0 -15
- package/src/managers/dnf.js +0 -17
- package/src/managers/npm.js +0 -20
- package/src/managers/pip.js +0 -21
- package/src/managers/runtime.js +0 -4
- package/src/managers/winget.js +0 -14
package/README.md
CHANGED
|
@@ -103,7 +103,6 @@ pnpm opm <command> [args] [options]
|
|
|
103
103
|
| `info <name>` | 查询包详情 |
|
|
104
104
|
| `versions <name>` | 列出所有可用版本 |
|
|
105
105
|
| `list` | 列出所有已安装包(仅运行时 node/php/python 与工具组 nvm/phpenv/uv 支持) |
|
|
106
|
-
| `outdated` | 列出过期包 |
|
|
107
106
|
| `install <name> [version]` | 安装包 |
|
|
108
107
|
| `uninstall <name>` | 卸载包 |
|
|
109
108
|
| `upgrade <name>` | 升级包 |
|
|
@@ -138,7 +137,7 @@ pnpm opm <command> [args] [options]
|
|
|
138
137
|
| 选项 | 说明 |
|
|
139
138
|
|------|------|
|
|
140
139
|
| `-g, --global` | 全局操作(npm: global node_modules; pip: system Python) |
|
|
141
|
-
| `-p, --proxy <url>` | 代理地址(search/info/versions/
|
|
140
|
+
| `-p, --proxy <url>` | 代理地址(search/info/versions/install/upgrade);未传时默认使用配置 `proxy.active`(为空则不启用代理) |
|
|
142
141
|
| `-h, --help` | 显示帮助 |
|
|
143
142
|
|
|
144
143
|
> 所有命令默认以 JSON 格式输出。
|
|
@@ -156,7 +155,6 @@ opm npm search axios 1.7.9 # 查询指定版本
|
|
|
156
155
|
opm npm view axios # 查询全局与项目作用域安装信息
|
|
157
156
|
opm npm info axios # 包详情
|
|
158
157
|
opm npm versions axios # 所有版本
|
|
159
|
-
opm npm outdated # 过期包
|
|
160
158
|
opm npm install axios # 安装
|
|
161
159
|
opm npm install axios 1.7.9 # 安装指定版本
|
|
162
160
|
opm npm install -g typescript # 全局安装
|
|
@@ -192,7 +190,6 @@ opm dnf search vim-enhanced # 查询包在源是否可用
|
|
|
192
190
|
opm dnf view vim-enhanced # 查询全局作用域安装信息(无项目作用域)
|
|
193
191
|
opm dnf info vim-enhanced # 包详情
|
|
194
192
|
opm dnf versions vim-enhanced # 所有可用版本
|
|
195
|
-
opm dnf outdated # 过期包
|
|
196
193
|
opm dnf install htop # 安装
|
|
197
194
|
opm dnf install vim-enhanced 9.0 # 安装指定版本
|
|
198
195
|
opm dnf uninstall htop # 卸载
|
|
@@ -211,7 +208,6 @@ opm apt search curl # 查询包在源是否可用
|
|
|
211
208
|
opm apt view curl # 查询全局作用域安装信息(无项目作用域)
|
|
212
209
|
opm apt info curl # 包详情
|
|
213
210
|
opm apt versions curl # 所有可用版本
|
|
214
|
-
opm apt outdated # 过期包
|
|
215
211
|
opm apt install htop # 安装
|
|
216
212
|
opm apt install curl 7.68.0-1ubuntu2.7 # 安装指定版本
|
|
217
213
|
opm apt uninstall htop # 卸载
|
|
@@ -230,7 +226,6 @@ opm brew search wget # 查询 wget 是否可用
|
|
|
230
226
|
opm brew view wget # 查询全局作用域安装信息(无项目作用域)
|
|
231
227
|
opm brew info wget # 包详情
|
|
232
228
|
opm brew versions wget # 所有可用版本
|
|
233
|
-
opm brew outdated # 过期包
|
|
234
229
|
opm brew install wget # 安装
|
|
235
230
|
opm brew install python 3.12 # 安装指定版本(versioned formula)
|
|
236
231
|
opm brew uninstall wget # 卸载
|
|
@@ -250,7 +245,6 @@ opm composer search monolog/monolog 3.9.0 # 查询指定版本
|
|
|
250
245
|
opm composer view monolog/monolog # 查询项目作用域安装信息(无全局作用域)
|
|
251
246
|
opm composer info monolog/monolog # 包详情
|
|
252
247
|
opm composer versions monolog/monolog # 所有可用版本
|
|
253
|
-
opm composer outdated # 过期包
|
|
254
248
|
opm composer install monolog/monolog # 安装(composer require)
|
|
255
249
|
opm composer install monolog/monolog ^3.0 # 安装指定版本约束
|
|
256
250
|
opm composer uninstall monolog/monolog # 卸载(composer remove)
|
|
@@ -268,7 +262,6 @@ opm bun search axios # 查询 axios 是否可用
|
|
|
268
262
|
opm bun view axios # 查询全局与项目作用域安装信息
|
|
269
263
|
opm bun info axios # 包详情
|
|
270
264
|
opm bun versions axios # 所有可用版本
|
|
271
|
-
opm bun outdated # 过期包
|
|
272
265
|
opm bun install axios # 安装(bun add)
|
|
273
266
|
opm bun uninstall axios # 卸载(bun remove)
|
|
274
267
|
opm bun upgrade axios # 升级(bun update)
|
package/docs/managers/apt.md
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
| `opm apt view <name>` | `dpkg -l` / `apt list --installed` | 查询包在全局作用域的安装信息(无项目作用域,project 显示未安装) |
|
|
15
15
|
| `opm apt info <name>` | `apt-cache show` | 包详情 |
|
|
16
16
|
| `opm apt versions <name>` | `apt-cache madison` / `policy` | 所有可用版本 |
|
|
17
|
-
| `opm apt outdated` | `apt list --upgradable` | 过期包 |
|
|
18
17
|
| `opm apt install <name>` | `apt install` | 安装 |
|
|
19
18
|
| `opm apt uninstall <name>` | `apt remove` | 卸载 |
|
|
20
19
|
| `opm apt upgrade <name>` | `apt upgrade` | 升级 |
|
package/docs/managers/brew.md
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
| `opm brew view <name>` | `brew list --versions <name>` | 查询包在全局作用域的安装信息(无项目作用域,project 显示未安装) |
|
|
16
16
|
| `opm brew info <name>` | `brew info --json=v2 <name>` | 查询包详情(描述/主页/许可证/仓库等) |
|
|
17
17
|
| `opm brew versions <name>` | `brew info --json=v2 <name>` | 列出所有可用版本 |
|
|
18
|
-
| `opm brew outdated` | `brew outdated --json=v2` | 列出过期包 |
|
|
19
18
|
| `opm brew install <name>` | `brew install <name>` | 安装包(formula / cask 均可) |
|
|
20
19
|
| `opm brew install <name> <version>` | `brew install <name>@<version>` | 安装指定版本(versioned formula) |
|
|
21
20
|
| `opm brew uninstall <name>` | `brew uninstall <name>` | 卸载包 |
|
|
@@ -65,9 +64,6 @@ opm brew info wget
|
|
|
65
64
|
# 列出 wget 所有可用版本
|
|
66
65
|
opm brew versions wget
|
|
67
66
|
|
|
68
|
-
# 列出过期包
|
|
69
|
-
opm brew outdated
|
|
70
|
-
|
|
71
67
|
# 安装 wget
|
|
72
68
|
opm brew install wget
|
|
73
69
|
|
package/docs/managers/bun.md
CHANGED
|
@@ -16,7 +16,6 @@ Bun 是全栈 JS 工具链(runtime + 包管理器 + 打包器),包管理
|
|
|
16
16
|
| `opm bun view <name>` | 查 `node_modules/<name>/package.json` | 查询包在全局与项目作用域的安装信息 |
|
|
17
17
|
| `opm bun info <name>` | HTTP 查 npm registry | 显示包详情 |
|
|
18
18
|
| `opm bun versions <name>` | HTTP 查 npm registry | 列出所有可用版本 |
|
|
19
|
-
| `opm bun outdated [-g]` | `bun outdated` | 列出过期包 |
|
|
20
19
|
| `opm bun install <name> [version]` | `bun add <name>@<version>` | 安装包 |
|
|
21
20
|
| `opm bun uninstall <name>` | `bun remove <name>` | 卸载包 |
|
|
22
21
|
| `opm bun upgrade <name>` | `bun update <name>` | 升级包 |
|
|
@@ -39,7 +38,6 @@ opm bun version
|
|
|
39
38
|
opm bun registry set taobao
|
|
40
39
|
opm bun search axios
|
|
41
40
|
opm bun info react
|
|
42
|
-
opm bun outdated
|
|
43
41
|
opm bun install axios
|
|
44
42
|
opm bun install react@18
|
|
45
43
|
opm bun upgrade axios
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
| `opm composer view <name>` | 读 `vendor/composer/installed.json` | 查询包在项目作用域的安装信息(无全局作用域,global 显示未安装) |
|
|
16
16
|
| `opm composer info <name>` | `{registry}/p2/{name}.json` | 查询包详情(描述/作者/主页/许可证等) |
|
|
17
17
|
| `opm composer versions <name>` | `{registry}/p2/{name}.json` | 列出所有可用版本 |
|
|
18
|
-
| `opm composer outdated` | `composer outdated --format=json` | 列出过期包 |
|
|
19
18
|
| `opm composer install <name>` | `composer require <name> --no-interaction` | 安装包 |
|
|
20
19
|
| `opm composer install <name> <version>` | `composer require <name>:<version> --no-interaction` | 安装指定版本约束 |
|
|
21
20
|
| `opm composer uninstall <name>` | `composer remove <name> --no-interaction` | 卸载包 |
|
|
@@ -69,9 +68,6 @@ opm composer info monolog/monolog
|
|
|
69
68
|
# 列出 monolog/monolog 所有可用版本
|
|
70
69
|
opm composer versions monolog/monolog
|
|
71
70
|
|
|
72
|
-
# 列出过期包
|
|
73
|
-
opm composer outdated
|
|
74
|
-
|
|
75
71
|
# 安装 monolog/monolog
|
|
76
72
|
opm composer install monolog/monolog
|
|
77
73
|
|
package/docs/managers/dnf.md
CHANGED
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
| `opm dnf view <name>` | `dnf list installed` | 查询包在全局作用域的安装信息(无项目作用域,project 显示未安装) |
|
|
15
15
|
| `opm dnf info <name>` | `dnf info` | 包详情 |
|
|
16
16
|
| `opm dnf versions <name>` | `dnf list --showduplicates` | 所有可用版本 |
|
|
17
|
-
| `opm dnf outdated` | `dnf check-update` | 过期包 |
|
|
18
17
|
| `opm dnf install <name>` | `dnf install` | 安装 |
|
|
19
18
|
| `opm dnf uninstall <name>` | `dnf remove` | 卸载 |
|
|
20
19
|
| `opm dnf upgrade <name>` | `dnf upgrade` | 升级 |
|
package/docs/managers/npm.md
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
| `opm npm view <name>` | `npm list <name>` / 读 `node_modules/<name>/package.json` | 查询包在全局与项目作用域的安装信息 |
|
|
16
16
|
| `opm npm info <name>` | `npm view <name>` | 查询包详情(描述/作者/主页/许可证等) |
|
|
17
17
|
| `opm npm versions <name>` | `npm view <name> versions` | 列出所有可用版本 |
|
|
18
|
-
| `opm npm outdated` | `npm outdated` | 列出过期包 |
|
|
19
18
|
| `opm npm install <name>` | `npm install <name>` | 安装包 |
|
|
20
19
|
| `opm npm install <name> <version>` | `npm install <name>@<version>` | 安装指定版本 |
|
|
21
20
|
| `opm npm install -g <name>` | `npm install -g <name>` | 全局安装 |
|
|
@@ -70,9 +69,6 @@ opm npm info axios
|
|
|
70
69
|
# 列出 axios 所有版本
|
|
71
70
|
opm npm versions axios
|
|
72
71
|
|
|
73
|
-
# 列出过期包
|
|
74
|
-
opm npm outdated
|
|
75
|
-
|
|
76
72
|
# 安装 axios
|
|
77
73
|
opm npm install axios
|
|
78
74
|
|
package/docs/managers/pip.md
CHANGED
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
| `opm pip view <name>` | `pip show <name>` | 查询包在全局与项目作用域的安装信息 |
|
|
16
16
|
| `opm pip info <name>` | PyPI JSON API / `pip show <name>` | 查询包详情(描述/作者/主页/许可证等) |
|
|
17
17
|
| `opm pip versions <name>` | PyPI JSON API / simple index | 列出所有可用版本 |
|
|
18
|
-
| `opm pip outdated` | `pip list --outdated` | 列出过期包 |
|
|
19
18
|
| `opm pip install <name>` | `pip install <name>` | 安装包 |
|
|
20
19
|
| `opm pip install <name> <version>` | `pip install <name>==<version>` | 安装指定版本 |
|
|
21
20
|
| `opm pip uninstall <name>` | `pip uninstall -y <name>` | 卸载包 |
|
|
@@ -66,9 +65,6 @@ opm pip info requests
|
|
|
66
65
|
# 列出 requests 所有版本
|
|
67
66
|
opm pip versions requests
|
|
68
67
|
|
|
69
|
-
# 列出过期包
|
|
70
|
-
opm pip outdated
|
|
71
|
-
|
|
72
68
|
# 安装 requests
|
|
73
69
|
opm pip install requests
|
|
74
70
|
|
package/docs/opm.html
CHANGED
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
<div id="managers_apt" class="doc-content" style="display:block;"><h1>apt 命令对照表</h1>
|
|
120
120
|
<p><code>@wwkit/opm</code> 统一命令管理 apt 包(Debian / Ubuntu 等 dpkg 系,系统级)。</p>
|
|
121
121
|
<h2>命令对照</h2>
|
|
122
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm apt version [name]</code></td><td><code>apt --version</code></td><td>无 name 显示 apt 版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm apt registry</code></td><td>读 <code>/etc/apt/sources.list.d/opm.list</code></td><td>查询当前启用源</td></tr><tr><td><code>opm apt registry set <url|preset></code></td><td>写 <code>/etc/apt/sources.list.d/opm.list</code> + <code>apt update</code></td><td>设置镜像源</td></tr><tr><td><code>opm apt registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm apt search <name></code></td><td><code>apt-cache search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm apt view <name></code></td><td><code>dpkg -l</code> / <code>apt list --installed</code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm apt info <name></code></td><td><code>apt-cache show</code></td><td>包详情</td></tr><tr><td><code>opm apt versions <name></code></td><td><code>apt-cache madison</code> / <code>policy</code></td><td>所有可用版本</td></tr><tr><td><code>opm apt
|
|
122
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm apt version [name]</code></td><td><code>apt --version</code></td><td>无 name 显示 apt 版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm apt registry</code></td><td>读 <code>/etc/apt/sources.list.d/opm.list</code></td><td>查询当前启用源</td></tr><tr><td><code>opm apt registry set <url|preset></code></td><td>写 <code>/etc/apt/sources.list.d/opm.list</code> + <code>apt update</code></td><td>设置镜像源</td></tr><tr><td><code>opm apt registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm apt search <name></code></td><td><code>apt-cache search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm apt view <name></code></td><td><code>dpkg -l</code> / <code>apt list --installed</code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm apt info <name></code></td><td><code>apt-cache show</code></td><td>包详情</td></tr><tr><td><code>opm apt versions <name></code></td><td><code>apt-cache madison</code> / <code>policy</code></td><td>所有可用版本</td></tr><tr><td><code>opm apt install <name></code></td><td><code>apt install</code></td><td>安装</td></tr><tr><td><code>opm apt uninstall <name></code></td><td><code>apt remove</code></td><td>卸载</td></tr><tr><td><code>opm apt upgrade <name></code></td><td><code>apt upgrade</code></td><td>升级</td></tr><tr><td><code>opm apt cache clean</code></td><td><code>apt clean</code></td><td>清理缓存</td></tr></tbody></table>
|
|
123
123
|
<h2>镜像预设</h2>
|
|
124
124
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>ubuntu-tsinghua</code></td><td><code>deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>ubuntu-huawei</code></td><td><code>deb https://mirrors.huaweicloud.com/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>ubuntu-aliyun</code></td><td><code>deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse</code></td></tr><tr><td><code>debian-official</code></td><td><code>deb http://deb.debian.org/debian/ bookworm main</code></td></tr><tr><td><code>debian-tsinghua</code></td><td><code>deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main</code></td></tr></tbody></table>
|
|
125
125
|
<h2>示例</h2>
|
|
@@ -134,7 +134,7 @@ opm apt cache clean</code></pre></div>
|
|
|
134
134
|
<div id="managers_brew" class="doc-content" style="display:none;"><h1>brew 命令对照表</h1>
|
|
135
135
|
<p><code>@wwkit/opm</code> 统一命令与 Homebrew 原始命令的映射关系(macOS)。</p>
|
|
136
136
|
<h2>命令对照</h2>
|
|
137
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm brew version [name]</code></td><td><code>brew --version</code></td><td>无 name 显示 brew 本身版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm brew registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm brew registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动传 <code>HOMEBREW_API_DOMAIN</code> / <code>HOMEBREW_BOTTLE_DOMAIN</code>;仅作用于本工具发起的命令,不改系统 brew 配置)</td></tr><tr><td><code>opm brew registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm brew search <name></code></td><td><code>brew info --json=v2 <name></code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm brew search <name> <version></code></td><td><code>brew info --json=v2 <name></code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm brew view <name></code></td><td><code>brew list --versions <name></code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm brew info <name></code></td><td><code>brew info --json=v2 <name></code></td><td>查询包详情(描述/主页/许可证/仓库等)</td></tr><tr><td><code>opm brew versions <name></code></td><td><code>brew info --json=v2 <name></code></td><td>列出所有可用版本</td></tr><tr><td><code>opm brew
|
|
137
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm brew version [name]</code></td><td><code>brew --version</code></td><td>无 name 显示 brew 本身版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm brew registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm brew registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>brew.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动传 <code>HOMEBREW_API_DOMAIN</code> / <code>HOMEBREW_BOTTLE_DOMAIN</code>;仅作用于本工具发起的命令,不改系统 brew 配置)</td></tr><tr><td><code>opm brew registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm brew search <name></code></td><td><code>brew info --json=v2 <name></code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm brew search <name> <version></code></td><td><code>brew info --json=v2 <name></code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm brew view <name></code></td><td><code>brew list --versions <name></code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm brew info <name></code></td><td><code>brew info --json=v2 <name></code></td><td>查询包详情(描述/主页/许可证/仓库等)</td></tr><tr><td><code>opm brew versions <name></code></td><td><code>brew info --json=v2 <name></code></td><td>列出所有可用版本</td></tr><tr><td><code>opm brew install <name></code></td><td><code>brew install <name></code></td><td>安装包(formula / cask 均可)</td></tr><tr><td><code>opm brew install <name> <version></code></td><td><code>brew install <name>@<version></code></td><td>安装指定版本(versioned formula)</td></tr><tr><td><code>opm brew uninstall <name></code></td><td><code>brew uninstall <name></code></td><td>卸载包</td></tr><tr><td><code>opm brew upgrade <name></code></td><td><code>brew upgrade <name></code></td><td>升级包到最新版本</td></tr><tr><td><code>opm brew cache clean</code></td><td><code>brew cleanup -s --prune=all</code></td><td>清理缓存</td></tr><tr><td><code>opm brew help</code></td><td>—</td><td>显示 brew 命令清单</td></tr></tbody></table>
|
|
138
138
|
<h2>镜像预设</h2>
|
|
139
139
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://ghcr.io/v2/homebrew</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles</code></td></tr><tr><td><code>ustc</code></td><td><code>https://mirrors.ustc.edu.cn/homebrew-bottles</code></td></tr></tbody></table>
|
|
140
140
|
<blockquote>镜像预设记录的是 bottle 域名;使用非 official 镜像时,<code>HOMEBREW_API_DOMAIN</code> 取 <code>${bottle}/api</code>,<code>HOMEBREW_BOTTLE_DOMAIN</code> 取 bottle 域名本身。</blockquote>
|
|
@@ -163,9 +163,6 @@ opm brew info wget
|
|
|
163
163
|
# 列出 wget 所有可用版本
|
|
164
164
|
opm brew versions wget
|
|
165
165
|
|
|
166
|
-
# 列出过期包
|
|
167
|
-
opm brew outdated
|
|
168
|
-
|
|
169
166
|
# 安装 wget
|
|
170
167
|
opm brew install wget
|
|
171
168
|
|
|
@@ -187,7 +184,7 @@ opm brew help</code></pre></div>
|
|
|
187
184
|
<p><code>@wwkit/opm</code> 统一命令管理 Bun 包。</p>
|
|
188
185
|
<p>Bun 是全栈 JS 工具链(runtime + 包管理器 + 打包器),包管理与 npm 兼容。</p>
|
|
189
186
|
<h2>命令对照</h2>
|
|
190
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm bun version [name]</code></td><td><code>bun --version</code></td><td>无 name 显示 bun 版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm bun registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>bun.registry.active</code></td><td>查询 bun registry 镜像</td></tr><tr><td><code>opm bun registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 bun registry 镜像(传给 <code>BUN_CONFIG_REGISTRY</code>)</td></tr><tr><td><code>opm bun registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm bun search <name> [version]</code></td><td>HTTP 查 npm registry</td><td>查询包是否可用</td></tr><tr><td><code>opm bun view <name></code></td><td>查 <code>node_modules/<name>/package.json</code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm bun info <name></code></td><td>HTTP 查 npm registry</td><td>显示包详情</td></tr><tr><td><code>opm bun versions <name></code></td><td>HTTP 查 npm registry</td><td>列出所有可用版本</td></tr><tr><td><code>opm bun
|
|
187
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm bun version [name]</code></td><td><code>bun --version</code></td><td>无 name 显示 bun 版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm bun registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>bun.registry.active</code></td><td>查询 bun registry 镜像</td></tr><tr><td><code>opm bun registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code></td><td>设置 bun registry 镜像(传给 <code>BUN_CONFIG_REGISTRY</code>)</td></tr><tr><td><code>opm bun registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm bun search <name> [version]</code></td><td>HTTP 查 npm registry</td><td>查询包是否可用</td></tr><tr><td><code>opm bun view <name></code></td><td>查 <code>node_modules/<name>/package.json</code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm bun info <name></code></td><td>HTTP 查 npm registry</td><td>显示包详情</td></tr><tr><td><code>opm bun versions <name></code></td><td>HTTP 查 npm registry</td><td>列出所有可用版本</td></tr><tr><td><code>opm bun install <name> [version]</code></td><td><code>bun add <name>@<version></code></td><td>安装包</td></tr><tr><td><code>opm bun uninstall <name></code></td><td><code>bun remove <name></code></td><td>卸载包</td></tr><tr><td><code>opm bun upgrade <name></code></td><td><code>bun update <name></code></td><td>升级包</td></tr><tr><td><code>opm bun cache clean</code></td><td><code>bun pm cache rm</code></td><td>清理缓存</td></tr></tbody></table>
|
|
191
188
|
<h2>镜像预设</h2>
|
|
192
189
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://registry.npmjs.org/</code></td></tr><tr><td><code>taobao</code></td><td><code>https://registry.npmmirror.com/</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-central-repo/</code></td></tr></tbody></table>
|
|
193
190
|
<blockquote>镜像通过 <code>BUN_CONFIG_REGISTRY</code> 环境变量传递给 bun 命令。</blockquote>
|
|
@@ -196,7 +193,6 @@ opm brew help</code></pre></div>
|
|
|
196
193
|
opm bun registry set taobao
|
|
197
194
|
opm bun search axios
|
|
198
195
|
opm bun info react
|
|
199
|
-
opm bun outdated
|
|
200
196
|
opm bun install axios
|
|
201
197
|
opm bun install react@18
|
|
202
198
|
opm bun upgrade axios
|
|
@@ -232,7 +228,7 @@ opm cft registry set official</code></pre></div>
|
|
|
232
228
|
<div id="managers_composer" class="doc-content" style="display:none;"><h1>composer 命令对照表</h1>
|
|
233
229
|
<p><code>@wwkit/opm</code> 统一命令与 Composer(PHP)原始命令的映射关系。</p>
|
|
234
230
|
<h2>命令对照</h2>
|
|
235
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm composer version [name]</code></td><td><code>composer --version</code></td><td>无 name 显示 composer 本身版本;有 name 显示包在项目作用域的版本(无全局作用域,global 显示未安装)</td></tr><tr><td><code>opm composer registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm composer registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>设置激活镜像(支持预设名;镜像作用于 search/info/versions 的 P2 元数据拉取)</td></tr><tr><td><code>opm composer registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm composer search <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm composer search <name> <version></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm composer view <name></code></td><td>读 <code>vendor/composer/installed.json</code></td><td>查询包在项目作用域的安装信息(无全局作用域,global 显示未安装)</td></tr><tr><td><code>opm composer info <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm composer versions <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm composer
|
|
231
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm composer version [name]</code></td><td><code>composer --version</code></td><td>无 name 显示 composer 本身版本;有 name 显示包在项目作用域的版本(无全局作用域,global 显示未安装)</td></tr><tr><td><code>opm composer registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm composer registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>composer.registry.active</code></td><td>设置激活镜像(支持预设名;镜像作用于 search/info/versions 的 P2 元数据拉取)</td></tr><tr><td><code>opm composer registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm composer search <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm composer search <name> <version></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm composer view <name></code></td><td>读 <code>vendor/composer/installed.json</code></td><td>查询包在项目作用域的安装信息(无全局作用域,global 显示未安装)</td></tr><tr><td><code>opm composer info <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm composer versions <name></code></td><td><code>{registry}/p2/{name}.json</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm composer install <name></code></td><td><code>composer require <name> --no-interaction</code></td><td>安装包</td></tr><tr><td><code>opm composer install <name> <version></code></td><td><code>composer require <name>:<version> --no-interaction</code></td><td>安装指定版本约束</td></tr><tr><td><code>opm composer uninstall <name></code></td><td><code>composer remove <name> --no-interaction</code></td><td>卸载包</td></tr><tr><td><code>opm composer upgrade <name></code></td><td><code>composer update <name> --no-interaction</code></td><td>升级包</td></tr><tr><td><code>opm composer cache clean</code></td><td><code>composer clear-cache</code></td><td>清理缓存</td></tr><tr><td><code>opm composer help</code></td><td>—</td><td>显示 composer 命令清单</td></tr></tbody></table>
|
|
236
232
|
<h2>镜像预设</h2>
|
|
237
233
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://repo.packagist.org</code></td></tr><tr><td><code>aliyun</code></td><td><code>https://mirrors.aliyun.com/composer</code></td></tr><tr><td><code>tencent</code></td><td><code>https://mirrors.cloud.tencent.com/composer</code></td></tr></tbody></table>
|
|
238
234
|
<blockquote>镜像作用于 search/info/versions 的 Packagist P2 元数据拉取(<code>{base}/p2/{vendor}/{package}.json</code>)。<br>install/upgrade 使用 composer CLI 自身的仓库配置(项目 composer.json / 全局 config)。</blockquote>
|
|
@@ -264,9 +260,6 @@ opm composer info monolog/monolog
|
|
|
264
260
|
# 列出 monolog/monolog 所有可用版本
|
|
265
261
|
opm composer versions monolog/monolog
|
|
266
262
|
|
|
267
|
-
# 列出过期包
|
|
268
|
-
opm composer outdated
|
|
269
|
-
|
|
270
263
|
# 安装 monolog/monolog
|
|
271
264
|
opm composer install monolog/monolog
|
|
272
265
|
|
|
@@ -303,7 +296,7 @@ opm config python.registry</code></pre></div>
|
|
|
303
296
|
<div id="managers_dnf" class="doc-content" style="display:none;"><h1>dnf 命令对照表</h1>
|
|
304
297
|
<p><code>@wwkit/opm</code> 统一命令管理 dnf 包(Fedora / RHEL / EulerOS 等 rpm 系,系统级)。</p>
|
|
305
298
|
<h2>命令对照</h2>
|
|
306
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm dnf version [name]</code></td><td><code>dnf --version</code></td><td>无 name 显示 dnf 版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm dnf registry</code></td><td>读 <code>/etc/yum.repos.d/opm.repo</code></td><td>查询当前启用仓库</td></tr><tr><td><code>opm dnf registry set <url|preset></code></td><td>写 <code>/etc/yum.repos.d/opm.repo</code> + <code>dnf clean</code></td><td>设置镜像仓库</td></tr><tr><td><code>opm dnf registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm dnf search <name></code></td><td><code>dnf search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm dnf view <name></code></td><td><code>dnf list installed</code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm dnf info <name></code></td><td><code>dnf info</code></td><td>包详情</td></tr><tr><td><code>opm dnf versions <name></code></td><td><code>dnf list --showduplicates</code></td><td>所有可用版本</td></tr><tr><td><code>opm dnf
|
|
299
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm dnf version [name]</code></td><td><code>dnf --version</code></td><td>无 name 显示 dnf 版本;有 name 显示包在全局作用域的版本(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm dnf registry</code></td><td>读 <code>/etc/yum.repos.d/opm.repo</code></td><td>查询当前启用仓库</td></tr><tr><td><code>opm dnf registry set <url|preset></code></td><td>写 <code>/etc/yum.repos.d/opm.repo</code> + <code>dnf clean</code></td><td>设置镜像仓库</td></tr><tr><td><code>opm dnf registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm dnf search <name></code></td><td><code>dnf search</code></td><td>查询包在源是否可用</td></tr><tr><td><code>opm dnf view <name></code></td><td><code>dnf list installed</code></td><td>查询包在全局作用域的安装信息(无项目作用域,project 显示未安装)</td></tr><tr><td><code>opm dnf info <name></code></td><td><code>dnf info</code></td><td>包详情</td></tr><tr><td><code>opm dnf versions <name></code></td><td><code>dnf list --showduplicates</code></td><td>所有可用版本</td></tr><tr><td><code>opm dnf install <name></code></td><td><code>dnf install</code></td><td>安装</td></tr><tr><td><code>opm dnf uninstall <name></code></td><td><code>dnf remove</code></td><td>卸载</td></tr><tr><td><code>opm dnf upgrade <name></code></td><td><code>dnf upgrade</code></td><td>升级</td></tr><tr><td><code>opm dnf cache clean</code></td><td><code>dnf clean all</code></td><td>清理缓存</td></tr></tbody></table>
|
|
307
300
|
<h2>镜像预设</h2>
|
|
308
301
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>hce</code></td><td><code>http://his-mirrors.huawei.com/install/hce/2.0/os/x86_64/</code></td></tr><tr><td><code>hce-updates</code></td><td><code>http://his-mirrors.huawei.com/install/hce/2.0/updates/x86_64/</code></td></tr><tr><td><code>fedora</code></td><td><code>https://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/</code></td></tr><tr><td><code>fedora-updates</code></td><td><code>https://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Everything/$basearch/</code></td></tr><tr><td><code>epel</code></td><td><code>https://dl.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/</code></td></tr><tr><td><code>epel-testing</code></td><td><code>https://dl.fedoraproject.org/pub/epel/testing/$releasever/Everything/$basearch/</code></td></tr></tbody></table>
|
|
309
302
|
<h2>示例</h2>
|
|
@@ -393,7 +386,7 @@ opm node upgrade</code></pre></div>
|
|
|
393
386
|
<div id="managers_npm" class="doc-content" style="display:none;"><h1>npm 命令对照表</h1>
|
|
394
387
|
<p><code>@wwkit/opm</code> 统一命令与 npm 原始命令的映射关系。</p>
|
|
395
388
|
<h2>命令对照</h2>
|
|
396
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm npm version [name]</code></td><td><code>npm --version</code></td><td>无 name 显示 npm 本身版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm npm registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm npm registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--registry</code>)</td></tr><tr><td><code>opm npm registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm npm search <name></code></td><td><code>npm view <name></code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm npm search <name> <version></code></td><td><code>npm view <name>@<version></code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm npm view <name></code></td><td><code>npm list <name></code> / 读 <code>node_modules/<name>/package.json</code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm npm info <name></code></td><td><code>npm view <name></code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm npm versions <name></code></td><td><code>npm view <name> versions</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm npm
|
|
389
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm npm version [name]</code></td><td><code>npm --version</code></td><td>无 name 显示 npm 本身版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm npm registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm npm registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>npm.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--registry</code>)</td></tr><tr><td><code>opm npm registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm npm search <name></code></td><td><code>npm view <name></code></td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm npm search <name> <version></code></td><td><code>npm view <name>@<version></code></td><td>查询指定版本是否可用</td></tr><tr><td><code>opm npm view <name></code></td><td><code>npm list <name></code> / 读 <code>node_modules/<name>/package.json</code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm npm info <name></code></td><td><code>npm view <name></code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm npm versions <name></code></td><td><code>npm view <name> versions</code></td><td>列出所有可用版本</td></tr><tr><td><code>opm npm install <name></code></td><td><code>npm install <name></code></td><td>安装包</td></tr><tr><td><code>opm npm install <name> <version></code></td><td><code>npm install <name>@<version></code></td><td>安装指定版本</td></tr><tr><td><code>opm npm install -g <name></code></td><td><code>npm install -g <name></code></td><td>全局安装</td></tr><tr><td><code>opm npm uninstall <name></code></td><td><code>npm uninstall <name></code></td><td>卸载包</td></tr><tr><td><code>opm npm uninstall -g <name></code></td><td><code>npm uninstall -g <name></code></td><td>全局卸载</td></tr><tr><td><code>opm npm upgrade <name></code></td><td><code>npm install <name>@latest</code></td><td>升级包到最新版本</td></tr><tr><td><code>opm npm upgrade -g <name></code></td><td><code>npm install -g <name>@latest</code></td><td>全局升级</td></tr><tr><td><code>opm npm cache clean</code></td><td><code>npm cache clean --force</code></td><td>清理缓存</td></tr><tr><td><code>opm npm help</code></td><td>—</td><td>显示 npm 命令清单</td></tr></tbody></table>
|
|
397
390
|
<h2>镜像预设</h2>
|
|
398
391
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://registry.npmjs.org/</code></td></tr><tr><td><code>taobao</code></td><td><code>https://registry.npmmirror.com/</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/npm-central-repo/</code></td></tr></tbody></table>
|
|
399
392
|
<h2>选项</h2>
|
|
@@ -424,9 +417,6 @@ opm npm info axios
|
|
|
424
417
|
# 列出 axios 所有版本
|
|
425
418
|
opm npm versions axios
|
|
426
419
|
|
|
427
|
-
# 列出过期包
|
|
428
|
-
opm npm outdated
|
|
429
|
-
|
|
430
420
|
# 安装 axios
|
|
431
421
|
opm npm install axios
|
|
432
422
|
|
|
@@ -497,7 +487,7 @@ opm phpenv uninstall</code></pre></div>
|
|
|
497
487
|
<div id="managers_pip" class="doc-content" style="display:none;"><h1>pip 命令对照表</h1>
|
|
498
488
|
<p><code>@wwkit/opm</code> 统一命令与 pip 原始命令的映射关系。</p>
|
|
499
489
|
<h2>命令对照</h2>
|
|
500
|
-
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm pip version [name]</code></td><td><code>pip --version</code></td><td>无 name 显示 pip 本身版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm pip registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm pip registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--index-url</code>)</td></tr><tr><td><code>opm pip registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm pip search <name></code></td><td>PyPI JSON API / simple index</td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm pip search <name> <version></code></td><td>PyPI JSON API / simple index</td><td>查询指定版本是否可用</td></tr><tr><td><code>opm pip view <name></code></td><td><code>pip show <name></code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm pip info <name></code></td><td>PyPI JSON API / <code>pip show <name></code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm pip versions <name></code></td><td>PyPI JSON API / simple index</td><td>列出所有可用版本</td></tr><tr><td><code>opm pip
|
|
490
|
+
<table><thead><tr><th>统一命令</th><th>原始命令</th><th>说明</th></tr></thead><tbody><tr><td><code>opm pip version [name]</code></td><td><code>pip --version</code></td><td>无 name 显示 pip 本身版本;有 name 显示包在全局与项目作用域的版本</td></tr><tr><td><code>opm pip registry</code></td><td>读 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>查询配置中的激活镜像(不读系统配置)</td></tr><tr><td><code>opm pip registry set <url|preset></code></td><td>写 <code>~/.config/opm/config.json5</code> 的 <code>pip.registry.active</code></td><td>设置激活镜像(支持预设名,install/upgrade 自动带 <code>--index-url</code>)</td></tr><tr><td><code>opm pip registry presets</code></td><td>—</td><td>列出可用镜像预设</td></tr><tr><td><code>opm pip search <name></code></td><td>PyPI JSON API / simple index</td><td>查询包在源是否可用(返回最新版本 + 版本列表)</td></tr><tr><td><code>opm pip search <name> <version></code></td><td>PyPI JSON API / simple index</td><td>查询指定版本是否可用</td></tr><tr><td><code>opm pip view <name></code></td><td><code>pip show <name></code></td><td>查询包在全局与项目作用域的安装信息</td></tr><tr><td><code>opm pip info <name></code></td><td>PyPI JSON API / <code>pip show <name></code></td><td>查询包详情(描述/作者/主页/许可证等)</td></tr><tr><td><code>opm pip versions <name></code></td><td>PyPI JSON API / simple index</td><td>列出所有可用版本</td></tr><tr><td><code>opm pip install <name></code></td><td><code>pip install <name></code></td><td>安装包</td></tr><tr><td><code>opm pip install <name> <version></code></td><td><code>pip install <name>==<version></code></td><td>安装指定版本</td></tr><tr><td><code>opm pip uninstall <name></code></td><td><code>pip uninstall -y <name></code></td><td>卸载包</td></tr><tr><td><code>opm pip upgrade <name></code></td><td><code>pip install --upgrade <name></code></td><td>升级包到最新版本</td></tr><tr><td><code>opm pip cache clean</code></td><td><code>pip cache purge</code></td><td>清理缓存</td></tr><tr><td><code>opm pip help</code></td><td>—</td><td>显示 pip 命令清单</td></tr></tbody></table>
|
|
501
491
|
<h2>镜像预设</h2>
|
|
502
492
|
<table><thead><tr><th>预设名</th><th>地址</th></tr></thead><tbody><tr><td><code>official</code></td><td><code>https://pypi.org/simple</code></td></tr><tr><td><code>tsinghua</code></td><td><code>https://pypi.tuna.tsinghua.edu.cn/simple</code></td></tr><tr><td><code>huawei</code></td><td><code>https://cmc.centralrepo.rnd.huawei.com/artifactory/api/pypi/pypi-repo/simple</code></td></tr></tbody></table>
|
|
503
493
|
<h2>选项</h2>
|
|
@@ -528,9 +518,6 @@ opm pip info requests
|
|
|
528
518
|
# 列出 requests 所有版本
|
|
529
519
|
opm pip versions requests
|
|
530
520
|
|
|
531
|
-
# 列出过期包
|
|
532
|
-
opm pip outdated
|
|
533
|
-
|
|
534
521
|
# 安装 requests
|
|
535
522
|
opm pip install requests
|
|
536
523
|
|
|
@@ -661,7 +648,7 @@ opm opencode clear --backup # 删除前备份数据库</code></pre></div
|
|
|
661
648
|
<ul><li><strong>通过</strong>: 225</li><li><strong>失败</strong>: 3(均为 pip 网络测试,依赖 pypi.org 直连,非本次改动引入)</li><li><strong>修复</strong>: cft.test.js 配置 active 不匹配(<code>npmmirror</code> → 动态断言)</li></ul>
|
|
662
649
|
<h2>二、真实环境命令测试</h2>
|
|
663
650
|
<h3>已安装命令(9 个)</h3>
|
|
664
|
-
<table><thead><tr><th>命令</th><th>动作</th><th>结果</th><th>备注</th></tr></thead><tbody><tr><td><code>opm npm</code></td><td>version</td><td>PASS</td><td>10.8.2</td></tr><tr><td>registry</td><td>PASS</td><td>npmmirror</td></tr><tr><td>installed</td><td>PASS</td></tr><tr><td>search</td><td>PASS</td><td>通过代理查询 axios</td></tr><tr><td>info</td><td>PASS</td></tr><tr><td>list</td><td>PASS</td></tr><tr><td>
|
|
651
|
+
<table><thead><tr><th>命令</th><th>动作</th><th>结果</th><th>备注</th></tr></thead><tbody><tr><td><code>opm npm</code></td><td>version</td><td>PASS</td><td>10.8.2</td></tr><tr><td>registry</td><td>PASS</td><td>npmmirror</td></tr><tr><td>installed</td><td>PASS</td></tr><tr><td>search</td><td>PASS</td><td>通过代理查询 axios</td></tr><tr><td>info</td><td>PASS</td></tr><tr><td>list</td><td>PASS</td></tr><tr><td>registry set</td><td>PASS</td><td>切换 huawei 后恢复</td></tr><tr><td><code>opm pip</code></td><td>version</td><td>PASS</td><td>21.3.1</td></tr><tr><td>registry</td><td>PASS</td><td>tsinghua</td></tr><tr><td>search</td><td>PASS</td><td>通过代理查询 requests</td></tr><tr><td>list</td><td>PASS</td></tr><tr><td>registry set</td><td>PASS</td></tr><tr><td><code>opm dnf</code></td><td>version</td><td>PASS</td><td>4.10.0</td></tr><tr><td>registry</td><td>PASS</td><td>hce</td></tr><tr><td>search</td><td>PASS</td><td>curl 返回 exists:false(HCE 源无此包,预期行为)</td></tr><tr><td><code>opm node</code></td><td>version</td><td>PASS</td><td>20.20.2</td></tr><tr><td>current</td><td>PASS</td><td>v20.20.2</td></tr><tr><td>list</td><td>PASS</td></tr><tr><td>versions</td><td>PASS</td><td>通过代理获取远程版本列表</td></tr><tr><td>use</td><td>PASS</td></tr><tr><td><code>opm nvm</code></td><td>version</td><td>PASS</td><td>0.40.4</td></tr><tr><td>installed</td><td>PASS</td></tr><tr><td>registry</td><td>PASS</td><td>huawei</td></tr><tr><td>dir</td><td>PASS</td><td>/root/.nvm</td></tr><tr><td>upgrade</td><td><strong>FAIL</strong></td><td><code>/root/.nvm</code> 非 git 仓库(git clone 安装的才支持 upgrade)</td></tr><tr><td>uninstall</td><td><strong>WARN</strong></td><td>实际执行了卸载,删除了 <code>/root/.nvm</code>,导致 node 不可用</td></tr><tr><td><code>opm config</code></td><td>(full)</td><td>PASS</td></tr><tr><td>proxy</td><td>PASS</td><td>显示 huawei 代理 + active</td></tr><tr><td><code>opm ping</code></td><td>host</td><td>PASS</td></tr><tr><td>proxy</td><td>PASS</td><td>通过代理访问 npm registry 验证可用性</td></tr><tr><td>registry</td><td>PASS</td><td>16/16 全部 reachable:true</td></tr><tr><td>source</td><td>PASS</td><td>打印 curl 示例命令</td></tr><tr><td><code>opm cft</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>dir</td><td>PASS</td></tr><tr><td>list</td><td>PASS</td></tr><tr><td>status</td><td>PASS</td></tr><tr><td>versions</td><td><strong>FAIL</strong></td><td>deepbluenet 镜像无 versions JSON 文件</td></tr><tr><td><code>opm ensure</code></td><td>node</td><td>PASS</td><td>已安装,satisfied:true</td></tr><tr><td>help</td><td>PASS</td></tr></tbody></table>
|
|
665
652
|
<h3>未安装命令(7 个)</h3>
|
|
666
653
|
<table><thead><tr><th>命令</th><th>动作</th><th>结果</th><th>备注</th></tr></thead><tbody><tr><td><code>opm uv</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>installed</td><td>PASS</td><td>false</td></tr><tr><td>registry</td><td>PASS</td><td>ghproxy</td></tr><tr><td>install</td><td><strong>FAIL</strong></td><td>超时——curl 未走代理,无法访问 ghproxy.com</td></tr><tr><td><code>opm python</code></td><td>version</td><td>PASS</td><td>3.9.9(系统 python)</td></tr><tr><td>current</td><td>PASS</td></tr><tr><td>versions</td><td><strong>FAIL</strong></td><td>uv 未安装,预期行为</td></tr><tr><td><code>opm phpenv</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>installed</td><td>PASS</td><td>false</td></tr><tr><td><code>opm php</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>versions</td><td><strong>FAIL</strong></td><td>phpenv 未安装,预期行为</td></tr><tr><td><code>opm composer</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>registry</td><td>PASS</td><td>aliyun</td></tr><tr><td><code>opm bun</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>registry</td><td>PASS</td><td>npmmirror</td></tr><tr><td><code>opm docker</code></td><td>version</td><td>PASS</td><td>未安装,输出空</td></tr><tr><td>installed</td><td>PASS</td><td>false</td></tr><tr><td>registry</td><td>PASS</td><td>huawei</td></tr><tr><td>status</td><td>PASS</td><td>installed:false</td></tr><tr><td>dir</td><td>PASS</td></tr><tr><td>install</td><td><strong>SKIP</strong></td><td>需要网络下载便捷脚本,未测(避免修改系统)</td></tr></tbody></table>
|
|
667
654
|
<h2>三、发现的问题</h2>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wwkit/opm",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.16",
|
|
4
4
|
"author": "bluesliu <langcai163@163.com>",
|
|
5
5
|
"description": "Unified CLI — package management (npm/pip/dnf/apt) + config view + opencode maintenance",
|
|
6
6
|
"type": "module",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"basic-ftp": "^6.2.1",
|
|
36
36
|
"extract-zip": "^2.0.1",
|
|
37
37
|
"systeminformation": "^5.23.0",
|
|
38
|
-
"@wwkit/shared": "1.0.
|
|
38
|
+
"@wwkit/shared": "1.0.21"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"jest": "^29.7.0"
|
|
@@ -57,7 +57,6 @@ const ACTIONS = {
|
|
|
57
57
|
view: { desc: 'Check package in global and project scopes' },
|
|
58
58
|
info: { desc: 'Show package details' },
|
|
59
59
|
versions: { desc: 'List all available versions of a package' },
|
|
60
|
-
outdated: { desc: 'List outdated packages' },
|
|
61
60
|
install: { desc: 'Install a package' },
|
|
62
61
|
uninstall: { desc: 'Uninstall a package' },
|
|
63
62
|
upgrade: { desc: 'Upgrade a package' },
|
|
@@ -99,6 +98,26 @@ export class PackageGroup {
|
|
|
99
98
|
await this._dispatch(manager, action, parsed, { global, proxy })
|
|
100
99
|
}
|
|
101
100
|
|
|
101
|
+
/**
|
|
102
|
+
* 打印当前 registry 和 proxy(诊断信息,输出到 stderr)
|
|
103
|
+
* 在涉及网络请求的命令执行前调用,便于连接失败时定位。
|
|
104
|
+
* 输出到 stderr 不污染 JSON stdout。
|
|
105
|
+
* @param {PackageManager} manager
|
|
106
|
+
* @param {string} [proxy]
|
|
107
|
+
* @private
|
|
108
|
+
*/
|
|
109
|
+
async _printEndpoint(manager, proxy) {
|
|
110
|
+
try {
|
|
111
|
+
const { registry } = await manager.getRegistry()
|
|
112
|
+
if (registry) {
|
|
113
|
+
console.error(`[opm] registry: ${registry}`)
|
|
114
|
+
}
|
|
115
|
+
} catch {}
|
|
116
|
+
if (proxy) {
|
|
117
|
+
console.error(`[opm] proxy: ${proxy}`)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
102
121
|
async _dispatch(manager, action, parsed, opts) {
|
|
103
122
|
const { positional } = parsed
|
|
104
123
|
|
|
@@ -152,6 +171,7 @@ export class PackageGroup {
|
|
|
152
171
|
console.error(`Usage: opm ${this.name} search <name> [version]`)
|
|
153
172
|
process.exit(1)
|
|
154
173
|
}
|
|
174
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
155
175
|
const result = await manager.searchPackage(name, version, { proxy: opts.proxy })
|
|
156
176
|
output(result)
|
|
157
177
|
break
|
|
@@ -174,6 +194,7 @@ export class PackageGroup {
|
|
|
174
194
|
console.error(`Usage: opm ${this.name} info <name>`)
|
|
175
195
|
process.exit(1)
|
|
176
196
|
}
|
|
197
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
177
198
|
const result = await manager.packageInfo(name, { proxy: opts.proxy })
|
|
178
199
|
output(result)
|
|
179
200
|
break
|
|
@@ -185,17 +206,12 @@ export class PackageGroup {
|
|
|
185
206
|
console.error(`Usage: opm ${this.name} versions <name>`)
|
|
186
207
|
process.exit(1)
|
|
187
208
|
}
|
|
209
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
188
210
|
const result = await manager.packageVersions(name, { proxy: opts.proxy })
|
|
189
211
|
output(result)
|
|
190
212
|
break
|
|
191
213
|
}
|
|
192
214
|
|
|
193
|
-
case 'outdated': {
|
|
194
|
-
const result = await manager.listOutdated({ global: !!opts.global, proxy: opts.proxy })
|
|
195
|
-
output(result)
|
|
196
|
-
break
|
|
197
|
-
}
|
|
198
|
-
|
|
199
215
|
case 'install': {
|
|
200
216
|
const name = positional[0]
|
|
201
217
|
const version = positional[1]
|
|
@@ -203,6 +219,7 @@ export class PackageGroup {
|
|
|
203
219
|
console.error(`Usage: opm ${this.name} install <name> [version]`)
|
|
204
220
|
process.exit(1)
|
|
205
221
|
}
|
|
222
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
206
223
|
const result = await manager.install(name, version, { global: !!opts.global, proxy: opts.proxy })
|
|
207
224
|
output(result)
|
|
208
225
|
break
|
|
@@ -225,6 +242,7 @@ export class PackageGroup {
|
|
|
225
242
|
console.error(`Usage: opm ${this.name} upgrade <name>`)
|
|
226
243
|
process.exit(1)
|
|
227
244
|
}
|
|
245
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
228
246
|
const result = await manager.upgrade(name, { global: !!opts.global, proxy: opts.proxy })
|
|
229
247
|
output(result)
|
|
230
248
|
break
|
|
@@ -266,7 +284,6 @@ Actions:
|
|
|
266
284
|
view <name> Show package in global and project scopes
|
|
267
285
|
info <name> Show package details
|
|
268
286
|
versions <name> List all available versions
|
|
269
|
-
outdated [-g] List outdated packages
|
|
270
287
|
install <name> [version] Install a package
|
|
271
288
|
uninstall <name> Uninstall a package
|
|
272
289
|
upgrade <name> Upgrade a package to latest
|
|
@@ -276,7 +293,7 @@ Actions:
|
|
|
276
293
|
|
|
277
294
|
Options:
|
|
278
295
|
-g, --global Global operation (npm: global node_modules; pip: system Python)
|
|
279
|
-
-p, --proxy <url> Proxy address (search/info/versions/
|
|
296
|
+
-p, --proxy <url> Proxy address (search/info/versions/install/upgrade);
|
|
280
297
|
overrides config proxy.active when provided
|
|
281
298
|
-h, --help Show this help
|
|
282
299
|
|
|
@@ -287,7 +304,6 @@ Examples:
|
|
|
287
304
|
opm ${this.name} view <name>
|
|
288
305
|
opm ${this.name} info <name>
|
|
289
306
|
opm ${this.name} versions <name>
|
|
290
|
-
opm ${this.name} outdated
|
|
291
307
|
opm ${this.name} install <name>
|
|
292
308
|
opm ${this.name} uninstall <name>
|
|
293
309
|
opm ${this.name} upgrade <name>
|
|
@@ -438,12 +454,14 @@ export class RuntimeGroup extends PackageGroup {
|
|
|
438
454
|
console.error(`Usage: opm ${this.name} install <version>`)
|
|
439
455
|
process.exit(1)
|
|
440
456
|
}
|
|
457
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
441
458
|
const result = await manager.install(this.name, version, { proxy: opts.proxy })
|
|
442
459
|
output(result)
|
|
443
460
|
break
|
|
444
461
|
}
|
|
445
462
|
|
|
446
463
|
case 'upgrade': {
|
|
464
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
447
465
|
const result = await manager.upgrade(this.name, { proxy: opts.proxy })
|
|
448
466
|
output(result)
|
|
449
467
|
break
|
|
@@ -455,12 +473,14 @@ export class RuntimeGroup extends PackageGroup {
|
|
|
455
473
|
console.error(`Usage: opm ${this.name} search <version>`)
|
|
456
474
|
process.exit(1)
|
|
457
475
|
}
|
|
476
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
458
477
|
const result = await manager.searchPackage(this.name, version, { proxy: opts.proxy })
|
|
459
478
|
output(result)
|
|
460
479
|
break
|
|
461
480
|
}
|
|
462
481
|
|
|
463
482
|
case 'versions': {
|
|
483
|
+
await this._printEndpoint(manager, opts.proxy)
|
|
464
484
|
const result = await manager.packageVersions(this.name, { proxy: opts.proxy })
|
|
465
485
|
output(result)
|
|
466
486
|
break
|
package/src/cli/index.js
CHANGED
|
@@ -132,7 +132,7 @@ ${groupLines}
|
|
|
132
132
|
|
|
133
133
|
Options:
|
|
134
134
|
-g, --global Global operation (npm: global node_modules; pip: system Python)
|
|
135
|
-
-p, --proxy <url> Proxy address (search/info/versions/
|
|
135
|
+
-p, --proxy <url> Proxy address (search/info/versions/install/upgrade)
|
|
136
136
|
-h, --help Show help
|
|
137
137
|
|
|
138
138
|
Run "opm <command> help" for command details.
|
package/src/managers/apt.js
CHANGED
|
@@ -326,23 +326,6 @@ export class AptManager extends PackageManager {
|
|
|
326
326
|
return { name, versions, registry }
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
-
async listOutdated(opts = {}) {
|
|
330
|
-
const out = this._exec(['list', '--upgradable', ...this._proxyArgs(opts.proxy)], { allowNonZero: true })
|
|
331
|
-
const items = []
|
|
332
|
-
for (const line of this._parseLines(out)) {
|
|
333
|
-
const m = line.match(/^(\S+?)\/(\S+)\s+(\S+)\s+(\S+)\s+\[(.*?)\]$/)
|
|
334
|
-
if (m) {
|
|
335
|
-
const from = m[5].match(/upgradable from:\s*(\S+)/)
|
|
336
|
-
items.push({
|
|
337
|
-
name: m[1],
|
|
338
|
-
current: from ? from[1] : '',
|
|
339
|
-
latest: m[3]
|
|
340
|
-
})
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
return items
|
|
344
|
-
}
|
|
345
|
-
|
|
346
329
|
async install(name, version, opts = {}) {
|
|
347
330
|
const spec = version ? `${name}=${version}` : name
|
|
348
331
|
const args = ['get', 'install', '-y', spec, ...this._proxyArgs(opts.proxy)]
|
package/src/managers/base.js
CHANGED
|
@@ -30,12 +30,6 @@
|
|
|
30
30
|
* @typedef {Object} InstalledItem
|
|
31
31
|
* @property {string} name - 包名
|
|
32
32
|
* @property {string} version - 版本
|
|
33
|
-
*
|
|
34
|
-
* @typedef {Object} OutdatedItem
|
|
35
|
-
* @property {string} name - 包名
|
|
36
|
-
* @property {string} current - 当前版本
|
|
37
|
-
* @property {string} [wanted] - 期望版本
|
|
38
|
-
* @property {string} latest - 最新版本
|
|
39
33
|
*/
|
|
40
34
|
export class PackageManager {
|
|
41
35
|
constructor() {
|
|
@@ -132,15 +126,6 @@ export class PackageManager {
|
|
|
132
126
|
throw new Error(`${this.name}: listInstalled not implemented`)
|
|
133
127
|
}
|
|
134
128
|
|
|
135
|
-
/**
|
|
136
|
-
* 列出过期包
|
|
137
|
-
* @param {{ global?: boolean, proxy?: string }} [opts] - 选项
|
|
138
|
-
* @returns {Promise<OutdatedItem[]>}
|
|
139
|
-
*/
|
|
140
|
-
async listOutdated(opts) {
|
|
141
|
-
throw new Error(`${this.name}: listOutdated not implemented`)
|
|
142
|
-
}
|
|
143
|
-
|
|
144
129
|
/**
|
|
145
130
|
* 安装包
|
|
146
131
|
* @param {string} name - 包名
|
package/src/managers/brew.js
CHANGED
|
@@ -214,33 +214,6 @@ export class BrewManager extends PackageManager {
|
|
|
214
214
|
return items
|
|
215
215
|
}
|
|
216
216
|
|
|
217
|
-
/**
|
|
218
|
-
* 解析 brew outdated --json=v2 输出为过期项数组(formulae + casks)
|
|
219
|
-
* @param {string} text
|
|
220
|
-
* @returns {{ name: string, current: string, latest: string }[]}
|
|
221
|
-
* @private
|
|
222
|
-
*/
|
|
223
|
-
_parseOutdatedJson(text) {
|
|
224
|
-
let data
|
|
225
|
-
try {
|
|
226
|
-
data = JSON.parse(text)
|
|
227
|
-
} catch {
|
|
228
|
-
return []
|
|
229
|
-
}
|
|
230
|
-
const items = []
|
|
231
|
-
for (const group of ['formulae', 'casks']) {
|
|
232
|
-
const list = Array.isArray(data[group]) ? data[group] : []
|
|
233
|
-
for (const item of list) {
|
|
234
|
-
items.push({
|
|
235
|
-
name: item.name,
|
|
236
|
-
current: (Array.isArray(item.installed_versions) ? item.installed_versions : []).join(', '),
|
|
237
|
-
latest: item.current_version || '',
|
|
238
|
-
})
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return items
|
|
242
|
-
}
|
|
243
|
-
|
|
244
217
|
async getVersion() {
|
|
245
218
|
try {
|
|
246
219
|
const out = this._exec(['--version'], { allowNonZero: true })
|
|
@@ -341,11 +314,6 @@ export class BrewManager extends PackageManager {
|
|
|
341
314
|
return { name, versions, registry }
|
|
342
315
|
}
|
|
343
316
|
|
|
344
|
-
async listOutdated(opts = {}) {
|
|
345
|
-
const out = this._exec(['outdated', '--json=v2'], { allowNonZero: true, proxy: opts.proxy })
|
|
346
|
-
return this._parseOutdatedJson(out)
|
|
347
|
-
}
|
|
348
|
-
|
|
349
317
|
async install(name, version, opts = {}) {
|
|
350
318
|
if (!isHomebrewInstalled()) {
|
|
351
319
|
console.log('[opm] Homebrew not installed, auto-installing...')
|
package/src/managers/bun.js
CHANGED
|
@@ -242,30 +242,6 @@ export class BunManager extends PackageManager {
|
|
|
242
242
|
return { name, versions, registry }
|
|
243
243
|
}
|
|
244
244
|
|
|
245
|
-
async listOutdated(opts = {}) {
|
|
246
|
-
const args = ['outdated']
|
|
247
|
-
if (opts.global) args.push('-g')
|
|
248
|
-
try {
|
|
249
|
-
const out = this._exec(args, { allowNonZero: true, proxy: opts.proxy })
|
|
250
|
-
const items = []
|
|
251
|
-
const lines = out.split('\n')
|
|
252
|
-
for (const line of lines) {
|
|
253
|
-
const parts = line.trim().split(/\s+/)
|
|
254
|
-
if (parts.length >= 3 && parts[0] !== 'package' && parts[0] !== 'name') {
|
|
255
|
-
items.push({
|
|
256
|
-
name: parts[0],
|
|
257
|
-
current: parts[1] || 'unknown',
|
|
258
|
-
wanted: parts[1] || '',
|
|
259
|
-
latest: parts[2] || 'unknown',
|
|
260
|
-
})
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
return items
|
|
264
|
-
} catch {
|
|
265
|
-
return []
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
|
|
269
245
|
async install(name, version, opts = {}) {
|
|
270
246
|
const spec = version ? `${name}@${version}` : name
|
|
271
247
|
const args = ['add', spec]
|
package/src/managers/composer.js
CHANGED
|
@@ -298,21 +298,6 @@ export class ComposerManager extends PackageManager {
|
|
|
298
298
|
return { name, versions, registry }
|
|
299
299
|
}
|
|
300
300
|
|
|
301
|
-
async listOutdated(opts = {}) {
|
|
302
|
-
const out = this._exec(['outdated', '--format=json'], { allowNonZero: true, proxy: opts.proxy })
|
|
303
|
-
try {
|
|
304
|
-
const data = JSON.parse(out)
|
|
305
|
-
const installed = Array.isArray(data.installed) ? data.installed : []
|
|
306
|
-
return installed.map((item) => ({
|
|
307
|
-
name: item.name,
|
|
308
|
-
current: item.version || '',
|
|
309
|
-
latest: item.latest || '',
|
|
310
|
-
}))
|
|
311
|
-
} catch {
|
|
312
|
-
return []
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
|
|
316
301
|
async install(name, version, opts = {}) {
|
|
317
302
|
const spec = version ? `${name}:${version}` : name
|
|
318
303
|
this._execInherit(['require', spec, '--no-interaction'], { proxy: opts.proxy })
|
package/src/managers/dnf.js
CHANGED
|
@@ -319,23 +319,6 @@ export class DnfManager extends PackageManager {
|
|
|
319
319
|
return { name, versions, registry }
|
|
320
320
|
}
|
|
321
321
|
|
|
322
|
-
async listOutdated(opts = {}) {
|
|
323
|
-
const args = ['list', '--upgrades', ...this._proxyArgs(opts.proxy)]
|
|
324
|
-
const out = this._exec(args, { allowNonZero: true })
|
|
325
|
-
const items = []
|
|
326
|
-
for (const line of this._parseLines(out)) {
|
|
327
|
-
const parts = line.split(/\s+/)
|
|
328
|
-
if (parts.length >= 3 && parts[1].includes('-')) {
|
|
329
|
-
items.push({
|
|
330
|
-
name: parts[0].replace(ARCH_SUFFIX, ''),
|
|
331
|
-
current: parts[1],
|
|
332
|
-
latest: parts[2]
|
|
333
|
-
})
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
|
-
return items
|
|
337
|
-
}
|
|
338
|
-
|
|
339
322
|
async install(name, version, opts = {}) {
|
|
340
323
|
const spec = version ? `${name}-${version}` : name
|
|
341
324
|
const args = ['install', '-y', spec, ...this._proxyArgs(opts.proxy)]
|
package/src/managers/npm.js
CHANGED
|
@@ -422,26 +422,6 @@ export class NpmManager extends PackageManager {
|
|
|
422
422
|
return { name, versions: [], registry }
|
|
423
423
|
}
|
|
424
424
|
|
|
425
|
-
async listOutdated(opts = {}) {
|
|
426
|
-
try {
|
|
427
|
-
const args = ['outdated']
|
|
428
|
-
if (opts.global) args.push('-g')
|
|
429
|
-
args.push(...this._proxyArgs(opts.proxy))
|
|
430
|
-
args.push(...this._registryArgs())
|
|
431
|
-
const data = this._execJson(args)
|
|
432
|
-
if (!data) return []
|
|
433
|
-
const items = Object.entries(data).map(([name, info]) => ({
|
|
434
|
-
name,
|
|
435
|
-
current: info.current || 'missing',
|
|
436
|
-
wanted: info.wanted || '',
|
|
437
|
-
latest: info.latest || ''
|
|
438
|
-
}))
|
|
439
|
-
return items
|
|
440
|
-
} catch (err) {
|
|
441
|
-
throw new Error(`npm outdated failed: ${err.message}`)
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
|
|
445
425
|
/**
|
|
446
426
|
* 查询 npm 主版本号(缓存),用于判断是否支持 --allow-scripts(npm >= 11)
|
|
447
427
|
* @returns {number}
|
package/src/managers/pip.js
CHANGED
|
@@ -511,27 +511,6 @@ export class PipManager extends PackageManager {
|
|
|
511
511
|
return { name, versions: [], registry }
|
|
512
512
|
}
|
|
513
513
|
|
|
514
|
-
async listOutdated(opts = {}) {
|
|
515
|
-
try {
|
|
516
|
-
const args = ['list', '--outdated', '--format=json']
|
|
517
|
-
if (opts.proxy) args.push('--proxy', opts.proxy)
|
|
518
|
-
const jsonOut = this._execPip(args, { ...opts, allowNonZero: true })
|
|
519
|
-
const parsed = JSON.parse(jsonOut)
|
|
520
|
-
if (!Array.isArray(parsed)) return []
|
|
521
|
-
return parsed.map((item) => ({
|
|
522
|
-
name: item.name || '',
|
|
523
|
-
current: item.version || '',
|
|
524
|
-
latest: item.latest_version || '',
|
|
525
|
-
...(opts.global ? { global: true } : {})
|
|
526
|
-
}))
|
|
527
|
-
} catch (err) {
|
|
528
|
-
if (err.message.includes('No packages') || err.message.includes('No broken')) {
|
|
529
|
-
return []
|
|
530
|
-
}
|
|
531
|
-
throw new Error(`pip list --outdated failed: ${err.message}`)
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
514
|
async install(name, version, opts = {}) {
|
|
536
515
|
const spec = version ? `${name}==${version}` : name
|
|
537
516
|
const args = ['install', spec]
|
package/src/managers/runtime.js
CHANGED
|
@@ -237,10 +237,6 @@ export class RuntimeManager extends PackageManager {
|
|
|
237
237
|
return this._parseInstalled(out)
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
async listOutdated(opts = {}) {
|
|
241
|
-
return []
|
|
242
|
-
}
|
|
243
|
-
|
|
244
240
|
async install(name, version, opts = {}) {
|
|
245
241
|
if (!version) {
|
|
246
242
|
throw new Error(this.cfg.installUsage)
|
package/src/managers/winget.js
CHANGED
|
@@ -221,20 +221,6 @@ export class WingetManager extends PackageManager {
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
async listOutdated(opts = {}) {
|
|
225
|
-
const out = this._exec(
|
|
226
|
-
['list', '--upgrade-available', '--accept-source-agreements', '--disable-interactivity'],
|
|
227
|
-
{ allowNonZero: true }
|
|
228
|
-
)
|
|
229
|
-
return this._parseTable(out).map((r) => ({
|
|
230
|
-
name: r.Name || r.Id,
|
|
231
|
-
id: r.Id,
|
|
232
|
-
current: r.Version || '',
|
|
233
|
-
latest: r.Available || '',
|
|
234
|
-
source: r.Source || '',
|
|
235
|
-
}))
|
|
236
|
-
}
|
|
237
|
-
|
|
238
224
|
async install(name, version, opts = {}) {
|
|
239
225
|
const args = ['install', name, '--accept-package-agreements', '--accept-source-agreements']
|
|
240
226
|
if (version) args.push('--version', version)
|