Tob*_*obi 9 dependency-management dart flutter pubspec
我的 flutter 项目依赖于几个本地 flutter 和 dart 包来保持分离和干净。\n我的文件夹结构如下:
\nmain-flutter-project\n\xe2\x94\x82 lib\n| test\n\xe2\x94\x82 pubspec.yaml\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 local-packages\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dart-package-1\n\xe2\x94\x82 \xe2\x94\x82 pubspec.yaml\n\xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 flutter-package-1\n\xe2\x94\x82 \xe2\x94\x82 pubspec.yaml\n\xe2\x94\x82 \xe2\x94\x82\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 flutter-package-2\n\xe2\x94\x82 pubspec.yaml\n...\nRun Code Online (Sandbox Code Playgroud)\n每个本地包都是独立的,可以在不接触主项目的情况下进行维护。
\n这种结构意味着我有很多pubspec.yaml文件,我必须在其中保持依赖项的更新。\n当我在 5 个包中使用 libaray 时bloc,当新版本发布时,bloc: ^7.2.1我必须分别更新每个文件中的版本。pubspec
是否可以仅在其他pubspec.yaml文件引用的一个位置指定这些共享包依赖项版本?
我已经在 Maven 中看到了这一点,您可以在其中指定一个属性<junit.version>4.12</junit.version>并从其他地方访问它<version>${junit.version}</version>。
ook*_*.kb 22
我们正在解决类似的问题。
AFAIK,没有内置或推荐的方法可以做到这一点,所以我们发明了一些技巧。
在我们的例子中,我们有core一个具有一些共享功能和公共依赖项的包,如果您没有它,您仍然可以创建一个人工包,比方说,shared_dependencies打包并指定其中的所有共享依赖项。
现在,假设包foo依赖于shared_dependencies包,并且包bar中定义了需要使用的依赖项。有一些方法可以做到这一点:shared_dependeciesfoo
直接导入依赖。由于foo传递地依赖于bar,因此您只需编写import package:bar/bar.dart即可工作。但这不是最好的方法:
导出shared_dependencies包中的包。即shared_dependencies.dart可以包含以下几行:
export 'package:bar/bar.dart'
Run Code Online (Sandbox Code Playgroud)
这意味着foo您可以在包中编写import 'shared_dependencies/shared_dependencies.dart'并访问bar内容。
优点:
对比:
foo包仅依赖于一个bar包,则导入所有共享依赖项可能会很奇怪。导出到单独的shared_dependencies包库中。您可以将一些相关的包分组到不同的文件中,例如:
bar.dart:
export 'package:bar/bar.dart'
Run Code Online (Sandbox Code Playgroud)
bloc.dart:
export 'package:bloc_concurrency/bloc_concurrency.dart';
export 'package:flutter_bloc/flutter_bloc.dart';
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果你需要barpackage in foo,你可以写import 'package:shared_dependencies/bar.dart'; 如果你需要bloc,你就写import 'package:shared_dependencies/bloc.dart'。自动导入也有效。
添加对包的直接依赖foo,但不指定版本约束:
bar:
Run Code Online (Sandbox Code Playgroud)
这基本上意味着您需要任何 bar包,但由于foo也依赖于shared_dependencies,因此将考虑其约束。如果您使用包中的某些可执行文件,则可能需要这样做,因为Dart SDKbar存在限制,不允许在传递依赖项中运行可执行文件。
在我们的项目中,我们最终使用了2最常用的包、3其他包以及4带有我们需要运行的可执行文件的包。
| 归档时间: |
|
| 查看次数: |
2205 次 |
| 最近记录: |