我正在尝试在本地调试 supabase_flutter 存储库。它们是软件包中的一些功能,我可以在我正在开发的应用程序中对其进行最佳测试。因此,我尝试使用本地存储库作为我的应用程序的 pubspec.yaml 中的依赖项。
我已经将存储库分叉并克隆到本地计算机,使用 melos 初始化所有内容,并根据 README 将本地包添加为依赖项。
当我尝试检查应用程序中从“supabase_flutter”包中导入的函数时,存储库的相关本地文件将按预期打开。但是当我尝试检查“postgrest”包中的函数时,我只会发送到 .pub-cache 目录中的文件副本。
这意味着,我无法测试对应用程序中“postgrest”包的文件所做的任何更改,因为 .pub-cache 目录中复制的文件不会更新。我只能调试对“supabase_flutter”包所做的更改,例如向
print
函数添加 Supabase.initialize
语句。我最初的目标是在 PostgrestTransformBuilder<T> range(int from, int to, {String? referencedTable})
处调试 packages/postgrest/lib/src/postgrest_transform_builder.dart
函数并在那里添加 print
语句。
我已经尝试了
pub get
、pub upgrade
和 melos bootstrap
的不同组合以及多次删除 .pub-cache 目录。
这不是 Supabase 特定的问题,而是 Dart 打包系统如何工作的问题。
我会尝试以下方法:
pubspec.lock
文件melos bs
pub get
pubspec.lock
文件中验证它是否使用本地版本的依赖项。我找到了满足我需求的解决方案/解决方法。根据
supabase_flutter仓库的
README
,将 supabase_flutter
包的本地路径添加到要导入它的项目中就足够了,例如:
supabase_flutter:
path: <your-path-to-the-local-supabase-flutter-repo>/packages/supabase_flutter
但是 monorepo 中的其他包仍然从 pub.dev 导入,而不是本地版本。对我来说,解决方案是在所有
pubspec.yaml
包中将所有依赖项从 monorepo 更改为其他包。例如,在本地 pubspec.yaml
包的 supabase_flutter
中:
supabase:
path: <your-path-to-the-local-supabase-flutter-repo>/packages/supabase
只有在再次在存储库中运行
melos bs
后,所有包的正确本地版本才会正确导入,然后才能对其功能进行调试。
我不确定我是否误解了 melos 的功能,或者更确切地说是 dart 包装系统本身,也许这是有意的行为。不幸的是,我在
supabase_flutter存储库的
README
中没有找到此过程的任何线索。