简介
在 dart 零碎中,有 pubspec.yaml 文件的利用就能够被成为一个 package。而 Libray package 是一类非凡的 package,这种包能够被其余的我的项目所依赖. 也就是通常所说的库。
如果你也想你写的 dart 程序能够上传到 pub.dev 上,或者提供给他人应用,则来看看这篇文章吧。
Library package 的构造
先看下 library package 的构造:
app3
├── lib
│ └── main.dart
└── pubspce.yaml
这是一个最简略的 Library package 的构造,在 root 目录上面,咱们有一个 pubspce.yaml 文件。而后还有一个 lib 目录寄存的是 library 的代码。
一般来说 lib 上面的库是能够供内部进行援用的。如果是 library 外部的文件,则能够放到 lib/src 目录上面,这外面的文件示意是 private 的, 是不应该被别的程序引入的。
如果想要将 src 中的包导出供内部应用,则能够在 lib 上面的 dart 文件中应用 export,将须要用到的 lib 导出。这样其余用户只须要 import 这个一个文件即可。
export 的例子如下:
library animation;
export 'src/animation/animation.dart';
export 'src/animation/animation_controller.dart';
export 'src/animation/animations.dart';
export 'src/animation/curves.dart';
export 'src/animation/listener_helpers.dart';
export 'src/animation/tween.dart';
export 'src/animation/tween_sequence.dart';
下面的代码是 flutter 的 animation 库。
导入 library
怎么应用呢?咱们能够应用 import 语句来导入对应的 lib:
import 'package:flutter/animation.dart';
如果是外部文件的导入,则能够应用相对路径。只有在导入内部 package 的时候才须要加上 package:前缀。
条件导入和导出 library
因为 dart 是设计在能够在不同的平台上进行工作,所以一个 library 在不同的平台可能须要导入或者导出不同的 library 文件,这就叫做条件导入和导出。
比方能够通过判断 dart 库是 io 库还是 html 库来抉择导出不同的文件:
export 'src/hw_none.dart' // Stub implementation
if (dart.library.io) 'src/hw_io.dart' // dart:io implementation
if (dart.library.html) 'src/hw_html.dart'; // dart:html implementation
下面的意思是,如果在 app 中可能应用 dart:io,那么就导出 src/hw_io.dart.
如果可能应用 dart:html, 那么就导出 src/hw_html.dart,否则就导出 src/hw_none.dart。
如果是条件导入的话,将 export 改成 import 即可。
增加其余无效的文件
因为不同的 library 有不同的作用,所以通常须要增加一些额定的文件来保障 library 的有效性和完整性。
为了保障 library 的有效性,须要增加测试代码,测试代码通常放在 test 目录中。
如果是创立命令行工具,则须要将对应的工具放到 tools 目录中。
另外还有 README.md 和 CHANGELOG.md 等文件。
library 的文档
dart 文档能够应用 dartdoc 这个工具来生成。dart 中的文档格局是以 /// 结尾的,如下:
/// The event handler responsible for updating the badge in the UI.
void updateBadge() {...}
公布到 pub.dev
一个最好共享 library 的形式就是将其发送到 pub.dev 上。具体的命令是:pub publish。
总结
以上就是 dart 中创立 library 的全部内容。
本文已收录于 http://www.flydean.com/11-dart-create-package/
最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!