各种语言都有自己的包默认的目录结构,dart也不例外。假设有一个名称为 enchilada 的完整的包目录(基本用到了所有的子目录),那么它的目录结构看起来像下面这样:
enchilada/
.dart_tool/ *
.packages *
pubspec.yaml
pubspec.lock **
LICENSE
README.md
CHANGELOG.md
benchmark/
make_lunch.dart
bin/
enchilada
doc/
api/ ***
getting_started.md
example/
main.dart
lib/
enchilada.dart
tortilla.dart
guacamole.css
src/
beans.dart
queso.dart
test/
enchilada_test.dart
tortilla_test.dart
tool/
generate_docs.dart
web/
index.html
main.dart
style.css
其中:
* .dart_tool 和 .packages 是由pub get 生成的,不需要纳入版本管理;
** pubspec.lock 也是由 pub get 命令生成的,除非你的包是应用程序包,否则也不建议纳入版本管理;
*** doc/api 目录是有dartdoc命令运行后生成的。不要纳入版本管理。
重点说明一下下面几个目录:
一、public 文件夹 (Public directories)
Public文件夹,对其它项目或引用者公开,由两个目录组成:lib 和 bin。lib存放库文件(libraries),bin存放一些工具文件。
1、Public libraries:lib
在上面的例子中,库文件夹如下,其中的文件可以被其他包导入和依赖、使用。
enchilada/
lib/
enchilada.dart
tortilla.dart
2、Public tools:bin
这里放置一些公共的脚本、工具。这些脚本和工具可以通过pub run 或 pub global run 进行运行。注意,项目私有的一些工具,不是放在这里的,而是放在tool文件夹下。
对于 CLI App,程序入口文件也建议放置在bin目录下,这样当你通过pub global激活它以后,就可以在任何CLI窗口运行它。
二、Implementation files
放置在lib/src文件夹下。如下所示:
enchilada/
lib/
src/
beans.dart
queso.dart
该目录下的文件,对外是不可见的,除了本项目以外,其它任何项目不要引用src目录中的文件,你也不要引用任何其它包的src下的文件。src下的功能,可以通过export关键字进行导出至lib下的文件中。同时,根据dart web开发的最佳实践,dart web开发以来的dart实现文件,均建议放置在该目录下,这样性能最高。
三、Internal tools and scripts
项目中经常有一些内部使用的工具和脚本,建议放置在tool目录下,该目录约定对外不可见或不可使用。
enchilada/
tool/
generate_docs.dart
最后,其它更为详细的信息,请参考官方文档《Package 的文件结构》:
https://dart.cn/tools/pub/package-layout