Dart: Dart 环境搭建与工具链 — SDK 安装到第一个程序

工欲善其事,必先利其器 — 搭好环境是写代码的第一步。

1. 你将学到


2. 一个初学者的真实故事

(1) 痛点:环境配置劝退新手

Alice 刚从 Python 转来学 Dart。她在网上搜了 5 篇教程,每篇说的安装方法都不一样 — 有的用 Homebrew,有的用 Chocolatey,有的手动下载。折腾 2 小时后,dart --version 还是报"command not found"。她还没写一行代码就想放弃了。

(2) 正确的解法

Dart SDK 安装其实只需 3 步:下载 → 配置 PATH → 验证。配合 VS Code 的 Dart 扩展,从安装到运行第一个程序只需 10 分钟。

BASH
# Step 1: Verify installation
dart --version

# Step 2: Create first project
dart create hello_dart

# Step 3: Run it
cd hello_dart && dart run
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(3) 收益


3. Dart SDK 安装

(1) 各平台安装方式

100%
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]
TEXT 📖 仅展示
> **输出:** 在本地 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

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:Windows 安装

BASH
# Install via Chocolatey (run as Administrator)
choco install dart-sdk

# Verify installation
dart --version
# Expected output: Dart SDK version: 3.x.x
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:macOS 安装

BASH
# Install via Homebrew
brew tap dart-lang/dart
brew install dart

# Verify installation
dart --version
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:Linux (Debian/Ubuntu) 安装

BASH
# 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
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(2) PATH 配置验证

安装后务必确认 dart 命令可用:

BASH
# 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
TEXT 📖 仅展示
> **输出:** 在本地 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 推荐

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:VS Code 调试配置

在项目根目录创建 .vscode/launch.json

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 模式支持热重载。

BASH
# Run a single file
dart run bin/main.dart

# Run a project (using pubspec.yaml)
dart run
TEXT 📖 仅展示
> **输出:** 在本地 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 快照 高性能运行

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:编译为可执行文件

BASH
# Compile to standalone executable
dart compile exe bin/main.dart -o datapipeline

# Run the executable
./datapipeline
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(3) dart format

自动格式化代码,遵循 Dart 官方风格指南。

BASH
# 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 .
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(4) dart analyze

静态分析代码,发现潜在问题。

BASH
# Analyze current project
dart analyze

# Analyze with fatal infos
dart analyze --fatal-infos
TEXT 📖 仅展示
> **输出:** 在本地 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 创建项目

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:创建项目

BASH
# 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
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

(2) pubspec.yaml 结构解析

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:pubspec.yaml 配置

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

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:Hello World

DART
// Alice's first Dart program
void main() {
  print('Hello, Dart!');
  print('Welcome to DataPipeline project.');
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

输出:

TEXT 📖 仅展示
Hello, Dart!
Welcome to DataPipeline project.

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:带命令行参数的 Hello World

DART
// 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)}');
  }
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

输出(dart run bin/main.dart Alice --verbose):

TEXT 📖 仅展示
Hello, Alice!
Additional args: [--verbose]

▶ 示例

TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

:使用 args 包解析参数

DART
// 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');
  }
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

8. 完整示例:DataPipeline 项目初始化

DART
// ============================================
// 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);
  }
}
TEXT 📖 仅展示
> **输出:** 在本地 DartPad 或 `dart run` 执行。Dart 课程所有示例基于 Dart 3.x / Flutter 3.x,运行结果会因 SDK 版本略有差异。

输出(dart run bin/main.dart -i orders.csv -o report.json --verbose):

TEXT 📖 仅展示
=== 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。


📖 小节


📝 作业

  1. 基础题(难度⭐):安装 Dart SDK,运行 dart --version 确认版本 ≥ 3.0.0,然后用 dart create hello_dart 创建并运行你的第一个项目。
  2. 进阶题(难度⭐⭐):配置 VS Code 的 launch.json,实现按 F5 一键运行 Dart 程序,并尝试设置断点调试。
  3. 挑战题(难度⭐⭐⭐):用 args 包写一个 CLI 小工具,支持 --count N 参数,输出 N 次 "Hello, DataPipeline!",并用 dart compile exe 编译为可执行文件。

← 上一课 | 下一课 →

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏