前言
嘿,终于等到你啦!我也是刚推开Rust
大门的同行者,包里揣着其他语言的底子,眼里带着点跃跃欲试,让我们一起每天学一点Rust
,相信总会看到光的!磨刀不误砍柴工,今天我们首先将Rust
环境配置好,做好一个通用项目模版,为后面做好铺垫。最好能科学上网哦,解决一些因网络问题产生的问题。
基本项目生成
下载Rust
下载Rust很简单,只需要执行下面这条命令:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
下载过程我就不截图了,下载完成后会让你选择安装标准版还是自定义安装,直接回车或者选择1就行了。windows的同学可以直接下载官网的安装包进行安装
生成基础项目
Rust安装完成后,运行下面的命令生成最基础的Rust项目:
cargo new rust-template
下面是生成的项目结构:
最基础的Rust项目很是简单,Cargo.toml
是依赖配置文件,main.rs
是入口文件,定位到项目根目录下运行cargo run
后展示出运行结果Hello World,便证明你的Rust环境配置成功了。
使用 Visual Studio Code 作为编程的IDE
下面就得请出宇宙级IDE Visual Studio Code 来帮助我们完成后续的任务了,如果你是以为前端开发者,对这个肯定不陌生,我就不啰嗦了,赶紧装上rust-analyzer
(Identifier: rust-lang.rust-analyzer) 开始我们后续的学习吧!
建议再安装上Dependi插件对依赖进行辅助管理,Dependi我之前的文章介绍过,大家可以看看:
安装必要的项目检查工具
安装 pre-commit
brew install pre-commit
// 或者
pip install pre-commit
pre-commit 是一个很好的代码检查工具,使用Python
实现,可以在提交代码前进行代码检查。安装完成后运行下面命令生成最基础的pre-commit
配置文件:
pre-commit sample-config > .pre-commit-config.yaml
先不管他的内容,我们先安装Hooks要运行的工具。
安装 cargo-deny
cargo-deny
是一个 Rust 工具,用于检查项目依赖项的许可证、安全性和其他合规性问题,运行下面命令安装:
cargo install cargo-deny --locked
安装完成后运行cargo-deny init
会在根目录下生成默认的deny.toml
配置文件,然后需要运行cargo deny fetch
获取初始化cargo-deny
的数据库,初始化完成后,让我们增加一个MIT协议试试cargo-deny
是否可用。
根目录新增一个LICENSE
文件,随便找一个开源MIT
协议的项目下的内容复制进来:
MIT License
Copyright (c) 2025 EditYJ
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
打开Cargo.toml
新增package.license
字段:
[package]
edition = "2024"
name = "rust-template"
version = "0.1.0"
license = "MIT" # 新增这一行
[dependencies]
最后运行cargo deny check -d
,你应该会得到下面的提示:
这是警告你deny.toml
文件内没有配置当前项目允许MIT协议,打开deny.toml
文件按照如图配置:
相信你一看就知道后面遇到类似的问题该怎么配置了。
也许你运行cargo deny check -d
时还会爆出如下错误:
这是由于你cargo deny fetch
失败了,这是在提示你数据库缺失。
如果到这里你一切顺利,那么cargo-deny
算是配置好了。
安装 typos
cargo install typos-cli
typos是一个源代码拼写的检查工具,防止我们代码内出现大量的错误拼写单词,根目录下手动新建_typos.toml
配置文件,这里就简单的说说常用的配置,其余配置大家可以到github上自行查看:
[default.extend-words]
# 放置忽略的单词
# 例如:teh = "teh",表示不纠正teh
[files]
extend-exclude = ["README.md"] # 排除不需要检查的文件
控制台运行typos
,可查看检查结果。
对于拼写错误,我建议大家还可以安装一个Visual Studio Code
插件Code Spell Checker
帮助检查拼写问题
安装 cargo-nextest
cargo install cargo-nextest --locked
cargo-nextest
是Rust
项目的下一代测试运行器,Rust
本身自带的测试工具效率并不好,目前cargo-nextest
是Rust
项目下比较流行的测试运行器。
安装完cargo-nextest
后,我们先尝试在main.rs内写一个简单的测试,试试工具安装是否有效,大家照葫芦画瓢就行:
// src/main.rs
fn main() {
println!("Hello, world!");
}
// 新增的测试代码
#[cfg(test)]
mod tests {
#[test]
fn test_main() {
assert_eq!("Hello, world!", "Hello, world!");
}
}
运行cargo nextest run
,如果输出如下结果就说明安装成功了:
为项目配置Git Hooks
上一小节我们已经安装了pre-commit
,为了使他为我们工作,利用好上面我们辛苦安装好的工具,我们先完善他的配置文件.pre-commit-config.yaml
:
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: fix-byte-order-marker
- id: check-case-conflict
- id: check-merge-conflict
- id: check-symlinks
- id: end-of-file-fixer
- id: check-yaml
- id: mixed-line-ending
- id: trailing-whitespace
- repo: local
hooks:
- id: cargo-fmt
name: cargo fmt
description: 使用 rust-fmt 格式化文件。
entry: bash -c 'cargo fmt -- --check'
language: rust
files: \.rs$
args: []
- id: cargo-deny
name: cargo deny check
description: 检查 cargo 依赖关系
entry: bash -c 'cargo deny check -d'
language: rust
files: \.rs$
args: []
- id: typos
name: typos
description: 使用 typo 拼写检查
entry: bash -c 'typos'
language: rust
files: \.*$
pass_filenames: false
- id: cargo-check
name: cargo check
description: 检查包是否有错误。
entry: bash -c 'cargo check --all'
language: rust
files: \.rs$
pass_filenames: false
- id: cargo-clippy
name: cargo clippy
description: rust analyzer 保证你写的代码通过编译;clippy 保证通过编译的代码写得更加地道,而不会陷入常见的代码规范错误
entry: bash -c 'cargo clippy --all-targets --all-features --tests --benches -- -D warnings'
language: rust
files: \.rs$
pass_filenames: false
- id: cargo-test
name: cargo test
description: 运行项目单元测试
entry: bash -c 'cargo nextest run --all-features'
language: rust
files: \.rs$
pass_filenames: false
我们先说说pre-commit-hooks
仓库
上面的配置文件中第一个repo中引用了pre-commit-hooks
仓库,这里面收集了很多通用的hooks,大家可以到仓库自行参考其中的hooks是什么作用。
说说repo: local
中的hooks
有些hooks中运行的命令在上面介绍的的检查工具中具体都有提过,这里就不赘述了,我主要说一下上面没有提到的。
cargo-fmt
这个hook
使用 rust-fmt
格式化文件。主要为了保持团队内所有人的代码在提交上去的那一刻格式是统一的,避免后续提交因格式而导致的提交记录中的更改展示混乱,难以排查问题。哈哈,前端出生的同学一定想到了,这个类似于前端经常使用的Prettier
。
cargo-check
这个hook主要用来检查根本性的语法错误,他报错了表明你的代码是不可能过编译阶段的,所以这个hook是很重要的,有了他保证,所有的代码提交上去后都能通过编译。
cargo-clippy
上面的cargo-check
是保证你的代码通过编译,而cargo-clippy
是保证通过编译的代码写得更加地道,而不会陷入常见的代码规范错误,cargo-clippy
有点像前端中的eslint
。
初始化仓库和应用Git hooks
运行git init
初始化仓库,添加一个简单的.gitignore
/target
.idea
运行pre-commit install
为项目增加提交前的检查
运行git add .
和git commit ...
提交看看
第一次运行他到github上下载我们配置的pre-commit-hooks
中的公共钩子,然后发现他给我们报错了,并且他帮我们修复了空格和文件尾部回车的问题,再次运行git add .
和git commit ...
可以看到这次算是成功了!
至此我们的rust-template
算是一个比较完善的模版项目了。
还不够,我还要自动化生成新项目!
对于我们这群极客开发者而言,每次新建项目都要手动复制粘贴改名称也太low了!下面我们来说说cargo-generate
简介
cargo-generate
是一个开发者工具,帮助你通过利用现有的 Git 仓库作为模板,快速启动并运行新的 Rust 项目。大家可以通过下面的命令安装:
cargo install cargo-generate
上传仓库
首先现将我们的模版仓库上传到github上,这个我就不多说了,是个开发者应该都会把!
使用cargo-generate
下载模版仓库
复制你的仓库路径,比如我这个
然后运行下面的命令,下载仓库代码:
cargo generate EditYJ/rust-template
运行过程中会让你输入项目名称,然后回车,咱们的新项目就创建完成了
哈哈,这样新建项目是不是就很快了!
[!warning]
记得开始新项目之前运行一下pre-commit install
这样我们配置的Git hooks才会生效。
更进一步
打开新建的项目你会发现,虽然文件夹的名字是我们输入的项目名称,但是README.md
、Cargo.toml
中的项目名称都没有改掉,有没有办法将这些名称都改掉呢?那肯定是有的啦。
打开cargo-generate
文档,找到5.1节,翻译一下
原来可以用占位符{{ project-name }}
,然后我们的项目名称可以自动填充上去,现在就试试看,将README.md
、Cargo.toml
中的项目名称部分换成{{ project-name }}
大功告成,提交试试,这时Git hooks肯定会给我们报错,因为Cargo.toml
使用了不规范的项目名称,因为这是模版项目,所以我们可以添加--no-verify
参数来提交,暂时跳过Git hooks检查:
git add .
git commit --no-verify -m "添加{{ project-name }} 占位符"
git push
最后我们再运行cargo generate EditYJ/rust-template
试试生成新项目看看我们的项目名称是否填充到了对应的位置:
打开项目,可以看到对应位置已经自动填充好了项目名称:
总结
总算啰嗦完了,本节我们从零开始建了一个还算比较规范的Rust项目模版,并通过cargo-generate
工具极大的减少了我们后面新建项目的流程,希望大家能好好消化理解,有什么问题可以留言给我进一步交流哦!
下节预告
下节我们将简单的过一下Rust的基本语法,了解一下Rust下该怎么写代码,这是十分重要的,哈哈,毕竟要跑起来前还是要学一下怎么走路。
🔥 关注我的公众号「哈希茶馆」一起交流更多开发技巧