20个版本
0.0.20 | 2020年9月12日 |
---|---|
0.0.19 | 2020年9月11日 |
0.0.13 | 2020年8月31日 |
#9 in #url-path
每月下载量31次
1.5MB
4K SLoC
bvm - 二进制版本管理器
所有二进制文件的版本管理器。
注意:这是一个概念验证。不建议使用,因为可能会出现许多重大更改。
目标
- 基于当前工作目录的无缝版本选择。
- 替换特定二进制的版本管理工具。
- 无中心化——所有URL和路径。
- 允许轻松地在组织内分发批准的二进制文件。
- 便于二进制作者分发他们的应用程序。
- 支持具有相同命令名称的完全不同的应用程序二进制文件。
- 向后兼容加载项目配置文件(达到1.0后)
- 无需WSL即可在Windows上运行。
- 允许与路径上现有的二进制文件一起工作(例如,
bvm use deno path
)。
设置
- 目前,通过cargo安装
bvm
——cargo install bvm
。 - 手动将shims文件夹添加到路径的第一个位置
- Windows:
%LOCALAPPDATA%\bvm\shims
- Mac/Linux:
$HOME/.bvm/shims
- Windows:
- 在项目中添加一个.bvmrc.json文件,并指定二进制清单文件的路径。
或者指定校验和以确保远程文件没有更改{ // optional commands to run on pre and post install "preInstall": "", "postInstall": "", // list of binaries to use "binaries": [ "https://bvm.land/deno/1.3.2.json", "https://bvm.land/node/14.9.0.json", "https://bvm.land/dprint/0.9.1.json" ] }
{ "binaries": [ "https://bvm.land/deno/1.3.2.json@6444d03bbb4e8b0a7966f406ab0a6d190581c205291d0e082bc9a57dd8498e97", "https://bvm.land/dprint/0.9.1.json@52b473cd29888badf1620ea501afbd210373e6dec66d249019d1a284cf43380b" ] }
- 运行
bvm install
命令
bvm init
在当前目录创建一个空的.bvmrc.json
文件。
bvm install
下载并安装当前.bvmrc.json
配置文件中的二进制文件,并在路径上与bvm关联,如果没有之前这样做的话。
- 提供
--use
标志以在路径上使用配置文件中的所有二进制文件(如果不在该目录之外)。 - 提供
--force
标志以强制安装一切,即使已经安装。
bvm install[url]
在指定的清单文件中安装二进制文件。
# Examples
bvm install https://bvm.land/deno/1.3.2.json
# optionally specify a checksum
bvm install https://bvm.land/deno/1.3.2.json@6444d03bbb4e8b0a7966f406ab0a6d190581c205291d0e082bc9a57dd8498e97
# if a previous installation is on the path, use this one instead
bvm install --use https://bvm.land/deno/1.3.1.json
- 提供
--use
标志以强制在路径上使用此二进制文件(如果没有在路径上,则会自动发生)。 - 提供
--force
标志以强制安装,即使已经安装。
bvmuse [binary-名称或所有者-名称/binary-名称] [版本]
使用指定的二进制名称和全局版本。
必须先前安装二进制和版本。
# Examples
bvm use deno 1.3.2
bvm use denoland/deno 1.3.2
bvm use name-stealer/deno 2.0.0
bvmuse [binary-名称或所有者-名称/binary-名称]path
如果存在,则使用路径上安装的二进制版本的版本。
# Example
bvm use deno path
bvmuse
在全局路径上使用当前配置文件中的所有二进制文件。
通常不需要使用此命令,因为它会在当前目录中自动执行。
bvm resolve[二进制名称]
根据当前工作目录解析指定二进制的可执行路径。
此命令由创建的shell/批处理文件(shims)用于指示如何解析文件。
# Example
bvm resolve deno
# on windows, outputs: C:\Users\<user>\AppData\Local\bvm\bvm\binaries\denoland\deno\1.3.1\deno.exe
bvm uninstall[binary-名称或所有者-名称/binary-名称] [版本]
卸载指定的二进制版本。
# Examples
bvm uninstall deno 1.2.0
bvm uninstall denoland/deno 1.3.2
bvm uninstall name-stealer/deno 2.0.0
bvm list
显示已安装的二进制文件。
示例输出
denoland/deno 1.2.0
denoland/deno 1.3.2
dprint/dprint 9.0.1
nodejs/node 14.9.0
bvm clear-url-缓存
清除任何缓存的URL。
注册表命令
添加注册表可以使您更容易安装二进制文件的副本,而无需处理URL。
bvm registry add[url]
将指定URL的注册表添加到本地CLI。
# Examples
bvm registry add https://bvm.land/deno/registry.json
bvm registry add https://bvm.land/node/registry.json
bvm registry remove[url]
从本地CLI中移除指定URL的注册表。
# Example
bvm registry remove https://bvm.land/node/registry.json
bvm registry list
列出CLI中保存的注册表。
示例输出
denoland/deno - https://bvm.land/deno/registry.json
nodejs/node - https://bvm.land/node/registry.json
bvm install[binary-名称或所有者-名称/binary-名称]
根据CLI的注册表安装指定二进制的最新非预发布版本。
# Examples
bvm install deno
bvm install --use node
bvm install[binary-名称或所有者-名称/binary-名称] [版本]
根据CLI注册表中第一个匹配的版本安装指定的二进制和版本。
# Examples
bvm install deno 1.3.3
bvm install --use node 14.9.0
实用命令
bvm
二进制提供一些可以在安装前和安装后脚本中使用的实用命令(目前只有1个)。
bvm util ensure-path<目录-path>
此实用程序将确保提供的目录位于系统路径上,并在必要时通知用户重新启动终端。
# Examples
bvm util ensure-path %APPDATA%\npm
重定向服务
网站https://bvm.land是一个重定向服务。如果您将bvm.json文件作为GitHub发布资产发布(目前不建议,因为这只是一个概念证明),则可以使用https://bvm.land
来重定向到您的发布
https://bvm.land/<owner>/<name>/<release-tag>.json
->https://github.com/<owner>/<name>/releases/download/<release-tag>/bvm.json
https://bvm.land/<name>/<release-tag>.json
->https://github.com/<name>/<name>/releases/download/<release-tag>/bvm.json
示例: https://bvm.land/dprint/0.9.1.json
二进制清单文件
目前,它看起来像这样
{
"schemaVersion": 1,
"name": "deno",
"owner": "denoland",
"version": "1.3.1",
"windows-x86_64": {
"path": "https://github.com/denoland/deno/releases/download/v1.3.1/deno-x86_64-pc-windows-msvc.zip",
"type": "zip",
"checksum": "6ba068e517a55dd33abd60e74c38aa61ef8f45a0774578761be0107fafc3758b",
"commands": [{
"name": "deno",
"path": "deno.exe"
}],
"preInstall": "# run any command pre installation (ex. kill process)",
"postInstall": "# this is where you can run some commands if necessary to cause additional setup"
},
"linux-x86_64": {
"path": "https://github.com/denoland/deno/releases/download/v1.3.1/deno-x86_64-unknown-linux-gnu.zip",
"type": "zip",
"checksum": "ef3a8740bdceab105808c91cfb918c883a23defb6719b9c511e2be30d5bfdc01",
"commands": [{
"name": "deno",
"path": "deno"
}]
},
"darwin-x86_64": {
"path": "https://github.com/denoland/deno/releases/download/v1.3.1/deno-x86_64-apple-darwin.zip",
"type": "zip",
"checksum": "b1bc5de79b71c3f33d0151486249d088f5f5604126812dc55b1dd21b28704d8a",
"commands": [{
"name": "deno",
"path": "deno"
}]
}
}
支持类型:zip
、exe
、tar.gz
(以后将添加更多)
其他示例
未来改进
低努力
- 列出注册表中二进制的版本。
- 当调用
bvm install <binary-name> <version>
时,列出找到的10个最相似的版本。 - 从注册表中获取版本的URL。
- 可能将“注册表”重命名为其他名称,因为它是一个针对每个注册表的二进制文件。
- 文档说明为什么不会支持每个注册表中的多个二进制文件(打开问题并在其中写入)。
- 在添加注册表后,输出二进制所有者/名称、描述(添加)和最新版本。
- URL应该是
url::Url
。版本应该是semver::Version
。 - 支持
bvm use <binary-name>
或使用一个版本,甚至bvm use <binary-name>
来使用最新版本。 - 添加命令以确保清单文件中的所有二进制文件都已安装(在Windows上,当用户在另一台计算机上使用时很有用,因为二进制文件是本地存储的)。
中等难度
- 可以在.bvmrc.json中指定支持的版本范围,以减少下载的二进制文件数量
{ "binaries": [{ "path": "https://bvm.land/deno/1.3.1.json", "version": "^1.3.0" }] }
- 除了URL之外,还支持文件路径。
- 可以轻松创建和删除别名(例如:
deno2
)- 这些应该与它们别名的二进制文件相关联,当您卸载二进制文件时,别名将被删除。
- 配置文件中的命令别名。
{ "binaries": [{ "path": "https://bvm.land/deno/1.3.1.json", "alias": "deno-1.3.1" }] }
- 可以一次性执行可执行文件的具体版本。
bvm exec deno 1.2.0 -V
或可能在shim级别deno -V --bvm-use-version 1.2.0
... 或者这可能需要使用bvm resolve
的某种方式。 - 添加
bvm lock
以更新配置文件URL的校验和。 - 多个子二进制下载位置(例如,假设
npm
是从不同的zip文件安装的node
)。
大工作量
- 支持下游二进制依赖项(还应支持依赖项的范围)。
遥远的未来
- 支持将注册表拆分为多个文件(例如,它将给出文件内部的semver范围)。这仅适用于非常大的文件。
可能是不必要的复杂性
bvm use <url>
- 通过URL全局使用二进制文件的具体版本。类似于是的。我认为应该有一个可以在bvm中安装的其他工具,该工具应该非常简单。但绝对应该有预安装和后安装脚本。npm run <script-name>
的东西吗?还是说这超出了范围?bvm use <binary name> <executable file path>
用于使用指定文件路径的执行文件。- 能够清除X天内未运行的任何二进制文件。
- 在使用
bvm resolve
时获取二进制文件的具体版本(例如:bvm resolve deno 1.3.1
) - 考虑创建一个隐藏子命令
bvm resolve-v1
。过于复杂。最好只有一个命令可以重新创建shim。
依赖关系
~15–29MB
~470K SLoC