【问题标题】:Dart package layoutDart 包布局
【发布时间】:2014-01-10 19:36:08
【问题描述】:

我刚刚阅读了Dart's suggested packagout layout spec 并对此有一些疑问:

  1. 规范说我应该将所有第 3 方包放入 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
    • 还有其他人吗?

【问题讨论】:

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


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

    【讨论】:

      【解决方案2】:

      1) 您不要将第 3 方包放入 lib 目录。

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

      第 3 方软件包仅在 pubspec.yaml 文件的 dependenciesdev_dependencies 部分中引用。其余的由pub维护。

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

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

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

      您可以通过在浏览器中打开入口页面或使用dart myscript.dart 运行脚本文件来启动应用程序,因此这清楚地定义了调用的内容。

      4)

      • 签入包裹/
      • 签入构建/
      • 检查 pubspec.lock 中的应用程序包
      • 不要在 pubspec.lock 中检查库包 也看看这个问题In Dart and Pub, should I add pubspec.lock to my .gitignore?
      • 我在 .gitignore 中有几个,但它们似乎不再被使用(至少不是 pub *
        • 出来
        • 部署
        • _from_packages

      不知何故,我觉得您混淆了库和包的概念。澄清一下:你可以在包内拥有多个库。如果您想使用它们,您可以(或必须)单独导入包的各个库。

      【讨论】:

      • 感谢@zoechi (+1) - 所以如果我理解正确,那么如果我的 Dart 应用程序不会生成任何可重用的库,那么我什至不需要 lib 目录,是吗?
      • @TicketMonster 完全正确
      • 即使在应用程序中,我也倾向于将大部分 dart 代码放在 lib 文件夹中。您可以使用以下命令导入它: import 'package:my_project_name/my_library.dart';更新 lib 文件夹中的文件时无需运行 pub。
      • 我以前也这样做过。但由于 pub build 不适用于聚合物应用程序的 lib 目录中的聚合物元素,我没有提及它以避免混淆(聚合物应用程序和聚合物库需要冲突的转换器设置)。
      猜你喜欢
      • 2013-10-18
      • 2014-08-29
      • 2013-04-06
      • 2011-08-03
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      相关资源
      最近更新 更多