模块系统与构建工具
学习 Rust 的模块系统、包管理和项目结构,对比 JavaScript 的模块化开发
模块系统与构建工具
📖 学习目标
了解 Rust 的模块系统和包管理工具 Cargo,学会如何组织 Rust 项目结构,并理解与 JavaScript 模块系统的差异。
🎯 模块系统对比
JavaScript 的模块系统
JavaScript 使用 ES6 模块语法:
正在加载...
Rust 的模块系统
Rust 使用 mod
和 use
关键字管理模块:
正在加载...
模块系统差异
- 文件组织: Rust 使用
mod
声明模块,JavaScript 使用文件路径 - 可见性: Rust 需要显式声明
pub
来公开函数和结构体 - 导入语法: Rust 使用
use
关键字,JavaScript 使用import
- 默认导出: Rust 没有默认导出概念,需要显式导入
📦 包管理系统对比
JavaScript 的 npm
正在加载...
Rust 的 Cargo
正在加载...
包管理差异
- 配置文件: npm 使用
package.json
,Cargo 使用Cargo.toml
- 依赖管理: Cargo 的依赖管理更严格,版本冲突处理更好
- 构建工具: Cargo 集成了构建、测试、文档生成等功能
- 特性系统: Rust 支持条件编译和特性标志
🏗️ 项目结构对比
JavaScript 项目结构
javascript-project/├── package.json├── package-lock.json├── node_modules/├── src/│ ├── index.js│ ├── math.js│ ├── utils.js│ └── components/│ ├── calculator.js│ └── formatter.js├── tests/│ ├── math.test.js│ └── utils.test.js├── dist/├── .gitignore└── README.md
Rust 项目结构
rust-project/├── Cargo.toml├── Cargo.lock├── src/│ ├── main.rs # 二进制程序入口│ ├── lib.rs # 库入口│ ├── math.rs│ ├── utils.rs│ └── components/│ ├── mod.rs # 子模块声明│ ├── calculator.rs│ └── formatter.rs├── tests/│ ├── integration_test.rs│ └── common/│ └── mod.rs├── examples/│ └── basic_usage.rs├── benches/│ └── benchmark.rs├── .gitignore└── README.md
🔧 Cargo 命令对比
npm 常用命令
正在加载...
Cargo 常用命令
正在加载...
📚 模块组织最佳实践
创建模块层次结构
正在加载...
🎯 练习题
练习 1: 创建模块结构
创建一个 Rust 项目,包含以下模块:
math
: 基础数学运算utils
: 工具函数models
: 数据模型
查看答案
// src/lib.rspub mod math;pub mod utils;pub mod models;// src/math.rspub fn add(a: i32, b: i32) -> i32 {a + b}pub fn multiply(a: i32, b: i32) -> i32 {a * b}// src/utils.rspub fn format_string(s: &str) -> String {format!("[{}]", s)}// src/models.rs#[derive(Debug)]pub struct User {pub name: String,pub age: u32,}impl User {pub fn new(name: String, age: u32) -> Self {User { name, age }}}
练习 2: 配置 Cargo.toml
为项目添加以下依赖:
serde
用于序列化tokio
用于异步编程reqwest
用于 HTTP 请求
查看答案
[package]name = "my-project"version = "0.1.0"edition = "2021"[dependencies]serde = { version = "1.0", features = ["derive"] }tokio = { version = "1.0", features = ["full"] }reqwest = { version = "0.11", features = ["json"] }
练习 3: 模块导入导出
创建一个模块,导出多个函数,并在 main.rs 中使用:
查看答案
// src/calculator.rspub fn add(a: f64, b: f64) -> f64 {a + b}pub fn subtract(a: f64, b: f64) -> f64 {a - b}pub fn multiply(a: f64, b: f64) -> f64 {a * b}// src/lib.rspub mod calculator;// main.rsuse my_project::calculator::{add, subtract, multiply};fn main() {println!("5.5 + 3.2 = {}", add(5.5, 3.2));println!("10.0 - 4.5 = {}", subtract(10.0, 4.5));println!("6.0 * 2.5 = {}", multiply(6.0, 2.5));}
📝 总结
在这一章中,我们学习了:
- 模块系统: Rust 使用
mod
和use
管理模块,比 JavaScript 更严格 - 包管理: Cargo 是 Rust 的包管理工具,功能比 npm 更集成
- 项目结构: Rust 项目有标准的目录结构
- 依赖管理: Cargo.toml 配置文件管理项目依赖
- 构建工具: Cargo 集成了构建、测试、文档等功能
关键要点
- Rust 的模块系统更注重可见性和组织性
- Cargo 是 Rust 生态系统的核心工具
- 项目结构遵循 Rust 约定
- 依赖管理更严格,避免版本冲突
下一步学习
在下一章中,我们将深入学习 Rust 的所有权系统,这是 Rust 最核心的概念,也是与 JavaScript 最大的差异所在。
继续学习: 所有权与内存模型