Dart CLI 开发上手

简介: Dart CLI 开发上手

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



image.png


编译成正式产品


上面的示例步骤我们使用的是 Dart VM(即 dart 命令)运行的应用。 Dart VM 针对快速增量编译进行了优化,以便在开发过程中提供即时的响应。现在你的小应用已经完成,是时候 AOT 优化编译你的 Dart 代码为原生机器代码了。

使用 dart compile 工具将程序 AOT 编译成机器代码:

dart compile exe bin/cli.dart

看看编译后的程序启动有多快:

time bin/cli.exe


image.png


获取依赖


如需要获取依赖包,如 args 包,请使用 Pub 包管理器

不过,对于第一个 CLI,我们可以轻松使用 dart pub add 命令添加所需的内容。

dart pub add args


image.png


image.png


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;
  }
}


image.png


发布


和 Flutter 库包发布流程类似,可以选择提交到官方 Dart Pub,或者自己的私服。

目录
打赏
0
0
0
0
5
分享
相关文章
app 上架需要准备什么以及上架流程
上架前需要准备的材料:众所周知,应用市场主要分为两类,一类是 App Store,另一类是安卓市场。而安卓市场又分为:第三方市场(如:应用宝、360 手机助手、豌豆荚),和手机厂商市场(如:华为、OPPO、VIVO、小米等)。
Python 的 for-else 循环结构是如何工作的?
本文介绍了Python中不太为人熟知但实用的`for-else`循环结构。通过示例讲解了其工作原理:当`for`循环正常结束而未遇到`break`时,执行`else`块。文章提供了两个应用场景——检查素数和列表搜索,帮助理解如何高效使用该结构。最后提醒,若无需条件跳出循环,普通`for`循环已足够。
215 33
|
6月前
|
鸿蒙开发:实现AOP代码插桩能力
正确的运用AOP,可以提升代码的模块化、复用性、可维护性和灵活性,同时降低了耦合度,使系统更易于扩展和维护。
122 13
鸿蒙开发:实现AOP代码插桩能力
第七章 SQL错误信息 - SQL错误代码 -400 到 -500
第七章 SQL错误信息 - SQL错误代码 -400 到 -500
411 1
GoIP
GoIP “【5月更文挑战第15天】”
584 2
51单片机--点亮LED灯和流水灯
51单片机--点亮LED灯和流水灯
385 0
InfluxData【付诸实践 01】Windows环境部署Telegraf+Influxdb+Grafana安装及使用配置(含百度云盘资源+demo脚本)
InfluxData【付诸实践 01】Windows环境部署Telegraf+Influxdb+Grafana安装及使用配置(含百度云盘资源+demo脚本)
543 0
Flutter笔记:用于ORM的Floor框架简记
最近想找用于Dart和Flutter的ORM框架,偶然间发现了Floor,觉得还不错,做一些记录。
539 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问