写给javascript程序员的rust教程(一)工具链概述【译】
原文:Rust for JavaScript Developers – Tooling Ecosystem Overview
翻译:http://www.mzh.ren/
这是关于向JavaScript开发者介绍Rust语言的系列中的第一部分。
我发现如果用已经知道的东西来解释新的东西,会更容易理解。我想可能会有其他人和我一样 🙂
以下是各自的工具链:
安装
Rust是使用rustup(https://rustup.rs/)命令安装的。rustup类似于Node.js中的nvm。你可以用它来安装和管理Rust的多个版本等等。
Cargo
使用rustup安装Rust也会安装Cargo,类似于安装Node.js也会安装NPM。Cargo是Rust的包管理器,如果你之前用过NPM,会觉得非常熟悉。
Rust的包被称为 “crate”,它们从crate.io注册表下载,类似于NPM包从npmjs.com下载的方式。
NPM虽然主要是一个包管理器,但也可以使用npm脚本功能作为任务运行器。Cargo内置了对运行代码、构建代码等常见任务的支持。Cargo有像工作空间(类似于lerna)、依赖覆盖(类似于patch-package)这样开箱即用的功能。它还内置了测试框架(类似于mocha、jest等)、基准运行器等。
毫不夸张的讲,Cargo就是另一个NPM!
创建rust项目
通过以下命令创建Rust项目:
$ cargo new hello_rust
这跟npm init很像,通过以上命令会创建一个 hello_rust的文件夹及以下文件结构:
hello_rust
├── .git
├── .gitignore
├── Cargo.toml
└─┬ src
└── main.rs
Cargo.toml
这是类似package.json的包清单文件。锁定文件(相当于package-lock.json)被命名为Cargo.lock。打开Cargo.toml,你会看到一个熟悉的配置范式:
[package]
name = "hello_rust"
version = "0.1.0"
authors = ["mzhren"]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[package]包含了元数据,如项目名称、作者、关键字等。[dependencies]表类似于package.json中的dependencies对象。Cargo.toml还支持[dev-dependencies],类似于devDependencies。
如果想安装新的依赖包,可以通过手动编辑Cargo.toml文件,在[依赖关系]下添加依赖包,然后运行cargo build来完成的。例如,如果想安装 “serde “包,需要编辑Cargo.toml文件,如下所示:
[package]
name = "hello_rust"
version = "0.1.0"
authors = ["mzhren"]
edition = "2018"
[dependencies]
+ serde = "1.0.106"
然后在cmd运行以下命令:
cargo build
ps:crates.io网站的速度慢如老牛。
同样,如果要删除或更新一个依赖关系,我们需要手动编辑Cargo.toml文件,然后运行cargo build。起初我对 cargo install 命令的存在感到困惑,后来发现它相当于 npm install -g。
如果你想要类似于npm install、npm update或npm uninstall,你可以安装 cargo-edit,它可以通过 cargo add、 cargo rm和 cargo upgrade子命令来增强Cargo的功能。
你也可以使用类似NPM的模式来指定依赖版本。
任务运行器
Cargo支持运行常见的任务,比如构建、运行、测试等。但如果你想要一些类似于NPM的脚本,你可以使用make或者 cargo-make。
实时重启服务
Nodemon是Node.js开发中必不可少的工具–它可以观察文件的变化,并自动重启应用程序。Cargo-watch是Rust世界中的等价物。
代码校验和格式化
Rust内置了名为Clippy的linter和名为rustfmt的formatter,它们相当于JS生态系统中的ESLint和Prettier。Precommit钩子可以使用 cargo-husky 来管理。
漏洞检查
扫描依赖关系中的漏洞是用 cargo-audit 来完成的,和 npm 审核非常相似。
感谢您的阅读! 🙂