Cargo — Package Manager & Build Tool ของ Rust
Cargo คือ npm + tsc + jest ในเครื่องเดียว
หัวข้อที่มีชื่อว่า “Cargo คือ npm + tsc + jest ในเครื่องเดียว”ถ้าเคยใช้ npm (หรือ yarn/pnpm) มาก่อน Cargo จะคุ้นมือทันที เพราะจัดการ dependency, build project, รันโค้ดและรัน test ได้ครบในตัวเดียว
สร้าง project ใหม่
หัวข้อที่มีชื่อว่า “สร้าง project ใหม่”# Node / TypeScriptmkdir my-app && cd my-appnpm init -ynpm install typescript --save-dev
# Rustcargo new my-app # creates a binary (has fn main)cargo new my-lib --lib # creates a library (no fn main)cd my-appcargo new สร้างโครงสร้าง:
flowchart TD root["my-app/"] --> toml["Cargo.toml — like package.json"] root --> lock["Cargo.lock — like package-lock.json"] root --> src["src/"] src --> main["main.rs — entry point"]
Cargo.toml เทียบกับ package.json
หัวข้อที่มีชื่อว่า “Cargo.toml เทียบกับ package.json”// package.json{ "name": "my-app", "version": "1.0.0", "dependencies": { "express": "^4.18.0" }, "devDependencies": { "typescript": "^5.0.0", "@types/express": "^4.17.0" }}# Cargo.toml[package]name = "my-app"version = "0.1.0"edition = "2024"
[dependencies]axum = "0.8"tokio = { version = "1", features = ["full"] }serde = { version = "1", features = ["derive"] }
[dev-dependencies]# crate สำหรับ test เท่านั้นใส่ที่นี่เพิ่ม dependencies
หัวข้อที่มีชื่อว่า “เพิ่ม dependencies”# npmnpm install serde_json # runtime depnpm install --save-dev vitest # dev dep
# Cargocargo add serde_json # runtime depcargo add --dev pretty_assertions # dev depcargo add อัปเดต Cargo.toml อัตโนมัติ เหมือนกับ npm install ทุกประการ
Subcommand หลัก
หัวข้อที่มีชื่อว่า “Subcommand หลัก”cargo build # compile (debug, fast, unoptimized)cargo build --release # compile (optimized, slower build)cargo run # compile + executecargo run -- --port 8080 # pass args to your binarycargo check # type-check only, no binary (very fast)cargo test # run all testscargo test my_fn # run tests whose name contains "my_fn"cargo doc --open # generate + open HTML docscargo clean # delete target/ directoryCargo.lock — commit หรือไม่?
หัวข้อที่มีชื่อว่า “Cargo.lock — commit หรือไม่?”# Binary / application → COMMIT Cargo.lock (reproducible builds)# Library crate → DO NOT commit Cargo.lock (let consumers pick versions)นี่สอดคล้องกับ convention ของ npm: application commit package-lock.json แต่ library ที่ publish มักไม่ commit