DartPad 运行
你可以使用 DartPad 来简单地尝试 Dart 编程语言和 API 且不需要下载任何东西。
安装 Dart
使用 Homebrew,安装 Dart 很容易。
brew tap dart-lang/dart brew install dart
创建一个小应用
使用 dart create
命令,以 console-full
模板创建一个命令行应用:
dart create -t console-full cli
该命令会创建一个包含下述信息的 Dart 应用:
- 一个主要的 Dart 源文件,
bin/cli.dart
,该文件包含一个顶层main()
函数。该函数是你应用的入口。 - 一个额外的 Dart 文件,
lib/cli.dart
,包含一些功能性的函数方法,这些函数方法将会导入到cli.dart
文件中。 - 一个 pubspec 文件,
pubspec.yaml
,包含应用的元数据,包括应用依赖的 package 信息以及所需的版本等。
运行应用
想要从命令行运行应用,请使用 dart run
命令在应用的根目录运行 Dart VM:
cd cli dart run
编译成正式产品
上面的示例步骤我们使用的是 Dart VM(即 dart
命令)运行的应用。 Dart VM 针对快速增量编译进行了优化,以便在开发过程中提供即时的响应。现在你的小应用已经完成,是时候 AOT 优化编译你的 Dart 代码为原生机器代码了。
使用 dart compile
工具将程序 AOT 编译成机器代码:
dart compile exe bin/cli.dart
看看编译后的程序启动有多快:
time bin/cli.exe
获取依赖
如需要获取依赖包,如 args 包,请使用 Pub 包管理器。
不过,对于第一个 CLI,我们可以轻松使用 dart pub add
命令添加所需的内容。
dart pub add args
dcat 应用代码示例
标准输入并打印实现参考示例,需要使用上面的 args 依赖库。
import 'dart:convert'; import 'dart:io'; import 'package:args/args.dart'; const lineNumber = 'line-number'; void main(List<String> arguments) { exitCode = 0; // presume success final parser = ArgParser()..addFlag(lineNumber, negatable: false, abbr: 'n'); ArgResults argResults = parser.parse(arguments); final paths = argResults.rest; dcat(paths, showLineNumbers: argResults[lineNumber] as bool); } Future<void> dcat(List<String> paths, {bool showLineNumbers = false}) async { if (paths.isEmpty) { // No files provided as arguments. Read from stdin and print each line. await stdin.pipe(stdout); } else { for (final path in paths) { var lineNumber = 1; final lines = utf8.decoder .bind(File(path).openRead()) .transform(const LineSplitter()); try { await for (final line in lines) { if (showLineNumbers) { stdout.write('${lineNumber++} '); } stdout.writeln(line); } } catch (_) { await _handleError(path); } } } } Future<void> _handleError(String path) async { if (await FileSystemEntity.isDirectory(path)) { stderr.writeln('error: $path is a directory'); } else { exitCode = 2; } }
发布
和 Flutter 库包发布流程类似,可以选择提交到官方 Dart Pub,或者自己的私服。