飞镖包布局

时间:2013-12-22 11:48:05

标签: layout dart package dependency-management dart-pub

我刚刚阅读Dart's suggested packagout layout spec并对此提出了一些问题:

  1. 规范说我应该将所有第三方软件包放入lib目录。但是,运行pub getpub upgrade会将这些包提取到packages目录中。那是哪个?!?我应该运行pub get,将包下拉到packages,然后手动将它们复制到lib吗?这似乎效率低下!
  2. 规范说应该是API的一部分的软件包应该放在lib中,但内部软件包(不是API的一部分)应该放在lib/src中。因此,如果我的项目依赖于名为transmogrify的第三方软件包,我如何知道哪些transmogrify软件包是公共API的一部分,应该放在lib中,哪些是“私人”,应该放在lib/src?这看起来很乏味!
  3. Dart应用可以使用2 + main()个方法吗?为什么/为什么不呢?
  4. 只是想确认以下文件应检入VCS:
    • packages/**
    • build/**(由pub build生成)
    • pubspec.lock
    • 还有其他人吗?

2 个答案:

答案 0 :(得分:2)

  1. 当您运行pub-get时,它会将所有必需的包拉入您的packages目录。保持结构不变。
  2. 我的建议是在Dart编辑器中打开pubspec.yaml文件时使用“添加包”中可以找到的包名称。
  3. 否。 main()是程序入口点。所以一个程序,一个条目。
  4. 这几乎是你列出的。添加一个:.buildlog。

答案 1 :(得分:2)

1)您没有将第三方软件包放入lib目录。

如果要构建可重用的库包,请将构建库的文件放在lib目录中。

第三方软件包仅在dependencies文件的dev_dependenciespubspec.yaml部分中引用。其余部分由pub维护。

2)应该部分回答1)。 您将库包的公共表面放入lib中。不应作为公共API公开的库内部可以/应该进入lib子目录。

3)我认为这取决于您如何指定Dart应用。 Dart包当然可以有几个主要功能。您不能在web目录中有更多的条目页面,每个条目都有一个主页。

你可以在bin,test,example中有更多的Dart脚本文件,其中每个文件都有一个main。

您可以通过在浏览器中打开一个条目页面或运行带有dart myscript.dart的脚本文件来启动应用程序,这样就可以明确定义所调用的内容。

4)

  • 签入packages /
  • 签入build /
  • 执行检入pubspec.lock以查找应用程序包
  • 在pubspec.lock中检查库包 还要看一下这个问题In Dart and Pub, should I add pubspec.lock to my .gitignore?
  • 我有几个.gitignore,但它们似乎不再被使用(至少不是pub *
    • 部署
    • _from_packages

我不知何故给人的印象是你正在混淆库和包的概念。只是为了澄清:你可以在包装里面放置多个库。如果要使用它们,您可以(或必须)单独导入包的各个库。