假设需要一个包含3个库和2个应用程序的项目。从pub文档中我选择了如下所示的结构。但是,应用程序的不同之处在于,他们希望自己拥有自己的目录。 (http://pub.dartlang.org/doc/#adding-a-dependency)处的文档说明将 pubspec.yaml 文件放在顶级中。 项目文件夹下方的上下文中是顶级吗?
如果有一个pubspec并且它位于 / project 级别并与lib共享,那么这不意味着任何lib的用户而不是应用程序会不必要地需要额外的包(比如good_stuff和big_stuff)?
/project
/app
/app1 (uses l1, package:good_stuff)
/app2 (uses l1, l2, l3, package:big_stuff)
/lib
/l1
/l2 (uses package:pathos/path.dart)
/l3 (uses l1 and l2)
/src
/l1
/l2
/l3
因此,给定这个所需的设置,将创建多少pubspec以及将在何处创建以满足这些依赖关系。
答案 0 :(得分:5)
您应该将pubspec.yaml
文件放在包的顶层。在Pub中,包是自包含代码的最大单元,包含包所需的所有库,可执行文件,示例,文档,测试和工具。
在Pub中,有两种类型的软件包:
这些是松散的定义,因为库包可能有可执行文件,而应用程序包可能有一些可用于其他应用程序的可重用库。
通常,您希望尝试使用多个独立组件创建项目,这些组件可以更改并单独重复使用。这与为应用程序的所有部分制作一个包相反。
我建议你有以下结构:
/project
/app1
- pubspec.yaml
/app2
- pubspec.yaml
/mechanics
- pubspec.yaml
/lib
l1.dart
l2.dart
l3.dart
/src
...
这里有2个应用程序包和一个库包。
一些注意事项:
您可以使用path dependencies
mechanics
包裹
如果您希望将整个项目捆绑在一起(例如,如果您正在销售它),那么您真的希望project/
成为最高级别。如果您预期app1
和app2
分开居住,根本不需要project/
。
如果你觉得他们能够分开居住,你可以完全自己制作l1
,l2
和l3
。在这种情况下,只需将它们全部打包即可。