Libraries是可以轻松创建共享模块化代码的好方法。在Dart生态系统中,Libraries是作为包创建和分发的。Dart有两种包:应用程序包、本地库和Libraries包;
如下为最简单的Lib的布局:
root dir
- lib
-file.dart
- pubspec.yaml
复制代码
一个Lib的最低要求是:
-
pubspec.yaml:
Lib的
pubspec.yaml
文件与应用程序的包的文件相同。没有特殊的名称来指定软件包是Lib。 -
lib文件夹:
Lib的代码位于lib目录下,并且对其他包是公共的。按照惯例实现的代码都在lib/src下。lib/src下的代码被认为是私有的;其他软件包永远不需要导入src/...,要使lib/src下的API公开,你可以在lib的文件中导出lib/src下的文件。
注:注意:如果未指定library,则会根据每个lib的路径和文件名生成唯一标记。 因此,除非计划生成库级文档,否则应该从代码中省略库指令。
组织一个Dart Lib
当创建小的单个Lib时,库包最容易维护、扩展和测试。在大多数情况下,每个类都应该在各自的Lib中,除非有两个类耦合的情况。
注:part指令允许将库拆分为多个Dart文件,应该避免使用该指令。
直接在lib/.dart下创建一个Lib文件,它导出所有公共的API。这允许用户通过导入单个文件来获取库的所有功能。
Lib目录还可能包含其他可导入的非src库。例如,主库可能跨平台工作,但你创建依赖dart的Lib:io
或dart:html
。
root dir
- example
- example_server.dart
- lib
- src
-body.dart
-utils.dart
- shelf.dart
- shelf_io.dart
- test
- test.dart
- tool
- travis.sh
复制代码
在lib目录下,主库文件shelf.dart从lib/src中导出文件
export 'src/utils.dart'
export 'src/body.dart'
复制代码
导入Lib并使用;
导入库文件时,可以使用package:指令指定该文件的URI:
import 'package:utilities/utilities.dart';
复制代码
生成文档;
可以使用dartdoc工具来为Lib生成API文档。
发布开源库
如果lib是开源的,可以在Pub网站上共享它。 要发布或更新库,使用pub publish,它会上传您的包并创建或更新其页面。pub网站不仅托管您的包,还生成并托管您的包的API参考文档。
注:要发布到Pub站点以外的地方,或者为了防止在任何地方发布,请使用pubspec中定义的publish_to字段。
准备发布
发布Lib时,遵循pubspec格式和包结构很重要。其中一些是必需的,以便其他人能够使用你的包。 其他建议是帮助用户更容易理解和使用您的包。
在这两种情况下,pub都会尝试通过指出哪些更改有助于使你的程序包在Dart生态系统中发挥更好的作用。 上传包时还有一些其他要求:
- 你必须包含包含开源许可证的许可证文件(名为LICENSE,COPYING或某些变体)。推荐使用Dart本身使用的BSD许可证,还必须拥有合法权利重新分发上传的任何内容。
- gzip压缩后,您的包必须小于10MB。如果它太大,请考虑将其拆分为多个包,或减少包含的资源或示例的数量。
- 你的包应该只有托管依赖项。Git依赖是允许的,但强烈反对;并非所有使用Dart的人都安装了Git,并且Git依赖项不支持版本解析以及托管依赖项。
请注意,与您的Google帐户关联的电子邮件地址会与上传的任何软件包一起显示在Pub网站上。
几个重要文件
Pub使用几个文件的内容在/packages/<your_package>中为您的包创建一个页面。 以下是影响包的页面外观的文件:
- 自述文件:自述文件(README,README.md,README.mdown,README.markdown)是软件包页面中的主要内容。
- CHANGELOG:你的软件包的CHANGELOG(CHANGELOG,CHANGELOG.md,CHANGELOG.mdown,CHANGELOG.markdown)如果找到,也会出现在软件包页面的标签中,以便开发人员可以直接从Pub网站上阅读。
- pubspec:你的软件包的pubspec.yaml文件用于在软件包页面的右侧填写有关软件包的详细信息,如描述,作者等。
发布文件
第一次发布时可以使用dart run
pub publish --dry-run
复制代码
Pub将检查以确保你的包是否遵循pubspec格式和包结构布局约束,然后将包上传到Pub站点。 Pub还会显示它打算发布的所有文件。 以下是发布名为transmogrify的包的示例:
Publishing transmogrify 1.0.0
.gitignore
CHANGELOG.md
README.md
lib
transmogrify.dart
src
transmogrifier.dart
transmogrification.dart
pubspec.yaml
test
transmogrify_test.dart
Package has 0 warnings.
复制代码
当准备发布包时,删除--day-run参数:
pub pushlish
复制代码
当包成功上传到Pub站点后,任何pub用户都可以在他们的项目中下载或依赖它。 例如,如果刚刚发布了transmogrify软件包的1.0.0版本,那么另一个Dart开发人员可以将其添加为pubspec.yaml中的依赖项:
dependencies:
transmogrify: ^1.0.0
复制代码