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...\n
Run 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_dependecies
foo
直接导入依赖。由于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)
在这种情况下,如果你需要bar
package 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 次 |
最近记录: |