Dart: Dart 环境搭建与工具链 — SDK 安装到第一个程序
工欲善其事,必先利其器 — 搭好环境是写代码的第一步。
1. 你将学到
- Dart SDK 安装(Windows / macOS / Linux)与 PATH 配置
- VS Code + Dart 扩展配置与调试设置
- dart run / dart compile / dart format / dart analyze 四大命令
- pubspec.yaml 初识与 dart create 模板
- Alice 的第一个 Hello World 程序
2. 一个初学者的真实故事
(1) 痛点:环境配置劝退新手
Alice 刚从 Python 转来学 Dart。她在网上搜了 5 篇教程,每篇说的安装方法都不一样 — 有的用 Homebrew,有的用 Chocolatey,有的手动下载。折腾 2 小时后,dart --version 还是报"command not found"。她还没写一行代码就想放弃了。
(2) 正确的解法
Dart SDK 安装其实只需 3 步:下载 → 配置 PATH → 验证。配合 VS Code 的 Dart 扩展,从安装到运行第一个程序只需 10 分钟。
# Step 1: Verify installation
dart --version
# Step 2: Create first project
dart create hello_dart
# Step 3: Run it
cd hello_dart && dart run
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(3) 收益
- 10 分钟从零到运行,不再被环境配置劝退
- VS Code 提供语法高亮、智能补全、调试一键运行
- dart analyze 在写代码时就能发现潜在问题
3. Dart SDK 安装
(1) 各平台安装方式
flowchart TD A[Download SDK] --> B[Configure PATH] B --> C[VS Code + Extension] C --> D[dart create] D --> E[dart run] E --> F[Hello World]
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
| 平台 | 推荐方式 | 命令 |
|---|---|---|
| Windows | Chocolatey | choco install dart-sdk |
| macOS | Homebrew | brew install dart |
| Linux (Debian) | APT | 见下方命令 |
| Linux (通用) | 手动下载 | 解压 + 配置 PATH |
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:Windows 安装
# Install via Chocolatey (run as Administrator)
choco install dart-sdk
# Verify installation
dart --version
# Expected output: Dart SDK version: 3.x.x
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:macOS 安装
# Install via Homebrew
brew tap dart-lang/dart
brew install dart
# Verify installation
dart --version
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:Linux (Debian/Ubuntu) 安装
# Add Dart APT repository
sudo apt-get update
sudo apt-get install apt-transport-https
sudo sh -c 'wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -'
sudo sh -c 'wget -qO- https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list > /etc/apt/sources.list.d/dart_stable.list'
# Install Dart SDK
sudo apt-get update
sudo apt-get install dart
# Verify installation
dart --version
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(2) PATH 配置验证
安装后务必确认 dart 命令可用:
# Check dart is in PATH
which dart # macOS/Linux
where dart # Windows
# If not found, add to PATH manually
# macOS/Linux: add to ~/.bashrc or ~/.zshrc
export PATH="$PATH:/usr/lib/dart/bin"
# Windows: add Dart SDK bin directory to System PATH
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| SDK 版本 | dart --version |
Dart SDK version: 3.x.x |
| 路径检查 | which dart |
/usr/lib/dart/bin/dart |
| pub 命令 | pub --version |
Pub 3.x.x |
4. VS Code 配置
(1) 扩展安装
| 扩展名 | 用途 | 必装 |
|---|---|---|
| Dart | 语法高亮、补全、调试 | 是 |
| Flutter (可选) | Flutter 开发支持 | 看需求 |
| Dart Import (可选) | 自动排序 import | 推荐 |
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:VS Code 调试配置
在项目根目录创建 .vscode/launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Dart: Run",
"type": "dart",
"request": "launch",
"program": "bin/main.dart"
}
]
}
(2) VS Code 常用快捷键
| 快捷键 | 功能 |
|---|---|
| F5 | 启动调试 |
| Ctrl+F5 | 不调试运行 |
| Ctrl+Shift+P → "Dart: Run" | 命令面板运行 |
| Ctrl+. | 快速修复 |
| Ctrl+Space | 智能补全 |
5. 四大核心命令
(1) dart run
直接运行 Dart 文件或项目,使用 JIT 模式支持热重载。
# Run a single file
dart run bin/main.dart
# Run a project (using pubspec.yaml)
dart run
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(2) dart compile
编译 Dart 代码为不同目标产物。
| 子命令 | 产物 | 用途 |
|---|---|---|
dart compile exe |
独立可执行文件 | CLI 工具发布 |
dart compile js |
JavaScript 文件 | Web 部署 |
dart compile aot-snapshot |
AOT 快照 | 高性能运行 |
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:编译为可执行文件
# Compile to standalone executable
dart compile exe bin/main.dart -o datapipeline
# Run the executable
./datapipeline
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(3) dart format
自动格式化代码,遵循 Dart 官方风格指南。
# Format all Dart files in current directory
dart format .
# Format specific file
dart format lib/main.dart
# Check formatting without modifying files
dart format --set-exit-if-changed .
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(4) dart analyze
静态分析代码,发现潜在问题。
# Analyze current project
dart analyze
# Analyze with fatal infos
dart analyze --fatal-infos
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
| 命令 | 用途 | 开发阶段 |
|---|---|---|
dart run |
运行代码 | 开发 |
dart compile |
编译产物 | 发布 |
dart format |
格式化代码 | 提交前 |
dart analyze |
静态分析 | 持续 |
6. pubspec.yaml 与项目模板
(1) dart create 创建项目
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:创建项目
# Create console application
dart create -t console-simple my_pipeline
# Project structure
# my_pipeline/
# ├── bin/
# │ └── my_pipeline.dart # Entry point
# ├── lib/
# │ └── my_pipeline.dart # Library code
# ├── test/
# │ └── my_pipeline_test.dart
# ├── pubspec.yaml # Dependencies
# └── analysis_options.yaml # Lint rules
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
(2) pubspec.yaml 结构解析
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:pubspec.yaml 配置
name: datapipeline
description: A CLI tool for e-commerce data analytics
version: 1.0.0
environment:
sdk: ^3.0.0
dependencies:
args: ^2.4.2
http: ^1.2.0
csv: ^6.0.0
dev_dependencies:
test: ^1.24.0
build_runner: ^2.4.0
| 字段 | 含义 | 示例 |
|---|---|---|
name |
包名 | datapipeline |
environment |
SDK 版本约束 | sdk: ^3.0.0 |
dependencies |
运行时依赖 | http: ^1.2.0 |
dev_dependencies |
开发依赖 | test: ^1.24.0 |
7. Alice 的第一个 Hello World
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:Hello World
// Alice's first Dart program
void main() {
print('Hello, Dart!');
print('Welcome to DataPipeline project.');
}
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
输出:
Hello, Dart!
Welcome to DataPipeline project.
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:带命令行参数的 Hello World
// Hello World with command line arguments
void main(List``<String>`` arguments) {
final name = arguments.isNotEmpty ? arguments[0] : 'World';
print('Hello, $name!');
if (arguments.length > 1) {
print('Additional args: ${arguments.sublist(1)}');
}
}
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
输出(
dart run bin/main.dart Alice --verbose):
Hello, Alice!
Additional args: [--verbose]
▶ 示例
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
:使用 args 包解析参数
// Professional CLI argument parsing with args package
import 'package:args/args.dart';
void main(List``<String>`` arguments) {
final parser = ArgParser()
..addOption('name', abbr: 'n', defaultsTo: 'World', help: 'Your name')
..addFlag('verbose', abbr: 'v', defaultsTo: false, help: 'Show verbose output');
final results = parser.parse(arguments);
final name = results['name'] as String;
final verbose = results['verbose'] as bool;
print('Hello, $name!');
if (verbose) {
print('Running in verbose mode');
}
}
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
8. 完整示例:DataPipeline 项目初始化
// ============================================
// DataPipeline CLI - Initial Setup
// A professional CLI tool skeleton
// ============================================
import 'package:args/args.dart';
const String version = '1.0.0';
void main(List``<String>`` arguments) {
final parser = ArgParser()
..addFlag('version', abbr: 'v', negatable: false, help: 'Show version')
..addFlag('help', abbr: 'h', negatable: false, help: 'Show help')
..addOption('input', abbr: 'i', help: 'Input data source path')
..addOption('output', abbr: 'o', defaultsTo: 'report.json', help: 'Output file path')
..addOption('format', allowed: ['json', 'csv', 'html'], defaultsTo: 'json', help: 'Output format')
..addFlag('verbose', help: 'Enable verbose logging');
try {
final results = parser.parse(arguments);
if (results['help'] as bool) {
print('DataPipeline - E-commerce analytics CLI tool');
print(parser.usage);
return;
}
if (results['version'] as bool) {
print('DataPipeline v$version');
return;
}
final input = results['input'] as String?;
final output = results['output'] as String;
final format = results['format'] as String;
final verbose = results['verbose'] as bool;
if (input == null) {
print('Error: --input is required');
print(parser.usage);
return;
}
print('=== DataPipeline v$version ===');
if (verbose) {
print('Input: $input');
print('Output: $output');
print('Format: $format');
}
print('Processing data from: $input');
print('Report saved to: $output ($format format)');
} on FormatException catch (e) {
print('Error: ${e.message}');
print(parser.usage);
}
}
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。
输出(
dart run bin/main.dart -i orders.csv -o report.json --verbose):
=== DataPipeline v1.0.0 ===
Input: orders.csv
Output: report.json
Format: json
Processing data from: orders.csv
Report saved to: report.json (json format)
❓ 常见问题
Q:安装后 dart 命令找不到怎么办? A:检查 PATH 环境变量是否包含 Dart SDK 的 bin 目录。Windows 用 where dart,macOS/Linux 用 which dart 定位。
Q:需要安装 Flutter SDK 吗? A:如果只学 Dart 语言本身,不需要。单独安装 Dart SDK 即可。后续学 Flutter 时再安装 Flutter SDK(已包含 Dart SDK)。
Q:dart run 和 dart compile exe 有什么区别? A:dart run 使用 JIT 即时编译运行,适合开发;dart compile exe 编译为独立可执行文件,无需 SDK 即可运行,适合发布。
Q:VS Code 的 Dart 扩展和 Flutter 扩展都要装吗? A:Dart 扩展必须装。Flutter 扩展仅在开发 Flutter 应用时需要,纯 Dart 项目不需要。
Q:pubspec.yaml 中的 ^ 符号是什么意思? A:^ 表示兼容该大版本。如 ^1.2.0 表示 >=1.2.0 <2.0.0,允许小版本和补丁版本升级。
Q:dart analyze 报很多 info 级别提示,要全部修复吗? A:info 级别是建议性的,不影响运行。建议修复 warning 和 error,info 视团队规范决定。
Q:如何选择 dart create 的模板? A:CLI 工具用 console-simple,包库用 package-simple,Flutter 用 flutter-create。本教程用 console-simple。
📖 小节
- Dart SDK 支持 Windows/macOS/Linux 三平台,推荐用包管理器安装
- VS Code + Dart 扩展是最佳开发环境,提供补全、调试、格式化一体化体验
- 四大核心命令:dart run(运行)、dart compile(编译)、dart format(格式化)、dart analyze(分析)
- pubspec.yaml 是项目的配置中心,管理依赖和元信息
- dart create 可快速生成项目模板,args 包用于 CLI 参数解析
📝 作业
- 基础题(难度⭐):安装 Dart SDK,运行
dart --version确认版本 ≥ 3.0.0,然后用dart create hello_dart创建并运行你的第一个项目。 - 进阶题(难度⭐⭐):配置 VS Code 的 launch.json,实现按 F5 一键运行 Dart 程序,并尝试设置断点调试。
- 挑战题(难度⭐⭐⭐):用 args 包写一个 CLI 小工具,支持
--count N参数,输出 N 次 "Hello, DataPipeline!",并用dart compile exe编译为可执行文件。