Javascript开发者的Rust教程cargo依赖管理
cargo是Rust的包管理器,其操作类似于node的npm。Cargo默认从crates.io下载第三方依赖crate箱子,crate的中文翻译箱子
cargo是Rust的包管理器,其操作类似于node的npm
。Cargo默认从crates.io下载第三方依赖crate箱子,crate的中文翻译箱子。您可以像在npmjs.com上一样注册帐户并发布模块。
你可以对cargo命令做一些快捷的映射,您几乎可以将您在npm使用的命令转换为Rust的cargo的命令。
在node.js你有package.json
管理依赖的模块或者库。在Rust中使用Cargo.toml
。管理你的Rust项目的依赖。Cargo的配置文件格式是toml,而不是你经常使用npm的package.json的JSON格式。
Cargo使用Cargo.toml
文件来了解要下载哪些依赖的模块/库、如何运行测试以及如何构建您的项目。
在本教程中,将说明使用cargo
初始化项目,安装依赖/模块,cargo install
全局安装,cargo test
运行测试,cargo publish
发布模块,运行任务,使用cargo-workspaces创建多个独立Rust项目,cargo-expand展开rust宏代码或者编译后的代码。
初始化项目
在node.js中是npm init
。在Rust中,你有两个命令可以初始化一个Rust项目。分别是cargo init
和cargo new
。
cargo init
和cargo new
区别是cargo init
在当前目录初始化项目。cargo new
在新目录中初始化项目,当运行cargo new my-rust
时my-rust目录将会被创建。
Cargo安装依赖/模块
在Node.JS中是安装依赖/模块的命令是npm install dep-name
。但在Rust的cargo并没有快捷的子命令让你添加依赖。
但是如果您可以安装cargo-edit
来扩展cargo的子命令。这样你就可以使用cargo子命令添加依赖。
例如,cargo add regex@0.1.41 --dev
将添加依赖到开发依赖中。cargo add gcc --build
将添加依赖到构建依赖中。除此之外还为您提供了四个新命令add
、rm
、upgrade
和set-version
。
全局安装
在node.js中是npm install --global
。在Rust中对应的命令是cargo install
。
使用cargo install
将在cargo的bin目录中下载、构建和存储可执行文件。如果您是通过官方的默认方式安装rust
/rustup
。
那么这些文件将放置在用户的家目录中,对于Linux/Mac OS用户通常是~/.cargo/bin
。由于安全问题,请不要使用sudo cargo install
。
运行测试
在Node.JS中运行测试命令通常是npm test
,因为很多项目都是如此声明在Package.json中。在Rust中对应的命令cargo test
。
cargo test
命令通过Cargo自动运行单元测试、集成测试和文档测试。Rust测试有很多内容,我们将在稍后的文章中介绍。
发布模块
在Node.JS中发布模块的命令是npm publish
。在Rust中对应的命令是cargo publish
。
如果需要发布模块。您需要首先在crates.io上注册一个帐户并设置身份验证信息。cargo会帮助您发布模块到crates.io。
运行任务
在Node.JS中运行任务的命令是npm run xxx
。在Rust中,您有用于常见任务的命令,但你可以添加自己的任务。
在Node.JS中,您可能会使用npm run start
来运行您的服务器或可执行文件。但0在 Rust中,你可以使用cargo run
。您还可以使用cargo run --example xxx
来自动运行示例代码。
在Node.JS中,您可能会使用npm run benchmarks
来分析您的代码。在Rust中对应的命令是cargo bench
.
在Node.JS中,您可能会使用npm run build
来运行webpack、tsc或其它命令。在Rust中对应的命令是cargo build
。
在Node.JS中,您可能会使用它npm run clean
来删除临时文件或生成的文件。在Rust中对应的命令是cargo clean
它会清除你的构建文件夹,默认情况下target
目录。
在Node.JS中,您可能会使用npm run docs
来生成文档。在Rust中对应的命令是cargo doc
。
对于代码生成或预构建步骤,cargo 支持在构建之前运行的构建脚本。默认情况下涵盖了您的许多用例,但是对于其它事情,您都必须自己解决。
npm
的内置任务运行器是Makefile
。这是您在JavaScript项目中很少看到的原因之一。
在Rust生态系统中,你就没那么幸运了。Makefile仍然很常见,但你可以使用just
来简化运行指定的命令。这相当于为Makefile命令创建快捷方式。
just
它是一个不错的选择,也是流行的解决方式。Makefile
它在保持相似语法的同时消除了它的许多奇怪之处。
以下cargo命令将会安装just
到你的~/.cargo/bin
目录中,即全局安装:
$ cargo install just
cargo-workspaces
cargo workspaces
或cargo ws
简化了工作区及其成员的创建和管理。它的灵感来自 Node.JS项目的lerna
。
cargo workspaces
最有价值的功能之一是自动发布工作区,用已发布的版本替换本地依赖。
以下cargo命令将会安装cargo-workspaces
到你的~/.cargo/bin
目录中,即全局安装:
$ cargo install cargo-workspaces
cargo-expand
在Rust中的宏是非常普遍的存在,以至于您的第一个Hello World应用程序中很多逻辑都将被打包成一个宏。
宏可让你您不重复编写代码,但它会使代码难以阅读和排除故障。cargo expand
可帮助你展开rust的宏。
以下cargo命令将会全局安装cargo-expand
,安装后您可以运行cargo expand [item]
以打印rustc编译器编译后生成的源代码。
$ cargo install cargo-expand
cargo expand
采用模块命名,而不是文件路径。运行cargo expand main
不会扩展src/main.rs,它会展开项目根目录中main函数。
它使用通用rust模块方式展开指定的代码,要指定在文件中找到模块,如src/some_module/another.rs,您将运行cargo expand some_module::another。
如果你运行cargo new
创建的项目,然后使用cargo expand
命令来测试,这可能就是你的src/main.rs
样子。println!()
是一个宏。