查看原文
其他

写给javascript程序员的rust教程(一)工具链概述【译】

coolder117 码农真经 2023-12-25

原文: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 审核非常相似。

感谢您的阅读! 🙂


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存