13 个版本
0.1.12 | 2022年9月7日 |
---|---|
0.1.11 | 2022年6月18日 |
0.1.10 | 2022年4月24日 |
0.1.9 | 2020年10月29日 |
183 在 Cargo 插件 中排名
每月 74 次下载
在 cargo-container 中使用
57KB
785 行
cargo-local-install
封装 cargo install
以实现更好的本地、非冲突安装
想要编写脚本 cargo install cargo-web --version 0.6 --root my-project
以避免与其他项目的版本冲突吗?
讨厌有成千上万份 cargo-web 0.6.26
的副本,并且如果你选择这条路,等待它构建?
cargo-local-install
现在为你提供支持,并将创建全局缓存中的可重复使用的 bins 的符号链接
快速入门
# no dependencies, builds in < 3 seconds on my machine
cargo install cargo-local-install --no-default-features
# slow first builds that create new exes
cargo local-install --locked cargo-web --version "^0.6" --root project-a # symlinks project-a/bin/cargo-web.exe
cargo local-install --locked cargo-web --version "^0.5" --root project-b # symlinks project-b/bin/cargo-web.exe
# fast cached builds that reuse existing exes
cargo local-install --locked cargo-web --version "^0.6" --root project-c # symlinks project-c/bin/cargo-web.exe
cargo local-install --locked cargo-web --version "^0.6" # symlinks bin/cargo-web.exe
# Adds Cargo.toml metadata support, < 30 seconds
cargo install cargo-local-install
选项大致类似于 cargo install
,但有几点需要注意
--locked
被强烈推荐(默认情况下会警告,除非使用--locked
或--unlocked
)--list
、--no-track
、--features
、--bin
和--example
不受支持--frozen
和--offline
不受支持(也不认为它们在cargo install
中有效!)-Z <标志>
不受支持
或者,您可以在Cargo.toml中指定工作空间或包元数据,类似于 [dependencies],这些将由 cargo local-install
安装。
[workspace.metadata.local-install]
cargo-web = "0.6" # == "^0.6" - includes "0.6.26" - locked by default
cargo-web = { version = "0.6", registry = "crates.io", locked = false } # `locked = false` ignores cargo-web's Cargo.lock
cargo-web = { path = "../cargo-web" }
cargo-web = { git = "https://github.com/koute/cargo-web" }
cargo-web = { git = "https://github.com/koute/cargo-web", branch = "master" }
cargo-web = { git = "https://github.com/koute/cargo-web", rev = "a9895bf536e8ac6a0806382886b7be90138f01f3" }
# not (yet?) implemented:
# features = [...]
# default-features = false
# optional = true
什么?为什么?
cargo install
很好,但也有几个缺点。
- 全局
~/.cargo/bin
目录一次只能包含一个安装的包版本 - 如果你有一个项目依赖于cargo web 0.5
,而另一个项目依赖于cargo web 0.6
,那你就麻烦了。 - 使用
--root my/project
强制本地安装以避免全局版本冲突意味着你必须为每个项目重新构建整个依赖项,即使你在之前100个项目中使用了完全相同的版本。 - 在构建类似二进制文件时,缺乏目标目录缓存意味着整个依赖树必须从头开始重新构建。
cargo local-install
尝试解决这些问题
- (Ab)uses
--target-dir
来共享构建的依赖项。 - 创建一个全局二进制缓存,但默认情况下在
./bin
中安装一个符号链接(如果失败则复制)。
替代方案:sccache
- github
- 优点:可以与
cargo-local-install
结合使用,无需挑选! - 优点:为所有内容缓存中间构建的crates,而不仅仅是安装的bins
- 优点:网络缓存选项,可以与他人共享
- 缺点:如果你是从源安装sccache的怪人,会有数百个依赖项
- 缺点:缓存丢失很多,至少在使用
cargo install ...
时是这样
以下是一些配置了 global .cargo/config rustc-wrapper 的本地测试的某些具体数字
对于本地磁盘配置的sccache | 时间 | 备注 |
---|---|---|
cargo安装 cargo-web --roota |
3m 38s | 干净的缓存,没有下载 |
cargo安装 cargo-web --roota |
~ 1 s | 由 cargo install 无操作 |
cargo安装 cargo-web --rootb |
1m 21s | 基于跳跃进度速度的许多缓存失败? |
使用本地安装(没有sccache) | 时间 | 备注 |
---|---|---|
cargo本地安装 cargo-web --rootc |
3m 03s | 干净的缓存,没有依赖项下载 |
cargo本地安装 cargo-web --rootc |
~ 1 s | 由 cargo install 无操作 |
cargo本地安装 cargo-web --rootd |
~ 1 s | 由 cargo local-install 产生的轻微缓存命中 |
许可
许可方式为以下之一
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示,否则你提交给作品中的任何贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,无需任何附加条款或条件。
依赖项
~210KB