【问题标题】:Import dart file outside lib directory在 lib 目录之外导入 dart 文件
【发布时间】:2019-06-09 08:32:24
【问题描述】:

为了让这个问题有任何意义,我将首先解释我当前的项目结构。对于我工作的公司,我创建了一个平台,可以为我们拥有的每个客户快速构建和定制应用程序。所以该项目使用 2 个存储库。

1) 应用程序存储库
此存储库包含应用程序的所有可自定义文件。基本上就是整个flutter项目,没有lib和test目录。

2) 核心存储库
为了使应用程序正常运行,核心存储库被加载到应用程序存储库中。 (这包含所有 .dart 文件)。我们这样做是因为如果我们对核心进行更改,它会在我们创建的所有应用程序中通过对核心执行简单的 git pull 进行更新。

现在是我想不通的部分。我们现在有一个客户想要在应用程序中使用自定义功能。我们无法再次使用此功能,因此我想将该段代码添加到应用程序存储库中。这是文件结构(只显示需要的)

项目
- 资产
- customLib(客户定制工作的文件,应用程序仓库的一部分)
- lib(此目录中的所有文件均来自核心存储库)
- 测试(此目录中的所有文件均来自核心 repo)
- pubspec.yaml

在我正在加载的核心应用程序的一个文件中。
这是文件 /lib/Library/ModuleRouter.dart
像这样加载它: import '../../customLib/customLibs.dart';
我尝试什么并不重要,但是当我超出放置 main.dart 的范围时,根本找不到代码。这些文件虽然存在。

这是我从编译器得到的错误:

Compiler message:
Error: Invalid package URI 'package:/customLib/customLibs.dart':
  Invalid argument (packageUri): Package URIs must not start with a '/': Instance of '_SimpleUri'.
lib/Library/ModuleRouter.dart:25:8: Error: Not found: 'package:/customLib/customLibs.dart'
import '../../customLib/customLibs.dart';

抱歉,这篇文章太长了,但我想解释一下整个项目,以便更好地了解当前项目。

我希望有人可以帮助我解决这个问题。

亲切的问候,
凯文·沃尔特

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    lib/ 外部导入文件不应该工作。这会阻止将包发布到 pub.dartlang.org,因为添加到依赖项时只会下载 lib/bin/

    您可以做的是创建一个新包,它甚至可以位于另一个包的目录中(例如my_proj/example/example1)或项目外部,然后将其作为依赖项添加到您的主项目并导入使用 import "package:example1/example1.dart" 之类的包导入从该包中获取文件。

    我不鼓励嵌套包,除非是为了示例。
    将密切相关的包作为兄弟姐妹通常是更好的方法。

    另见

    【讨论】:

    • 创建一个新的包非常有效!谢谢你的信息!
    • 您可以将新包添加为路径依赖项,然后使用前面提到的包导入将其导入。dartlang.org/tools/pub/dependencies#path-packages
    • 我有一个和OP类似的用例,谢谢分享。我正在创建一个专门用于样式/资产/配置的包。我们有一个白标应用程序,因此我们利用子模块根据分支分离客户特定文件。
    【解决方案2】:

    接受的answer 是正确答案。
    就我而言,我仍然需要导入一个文件。 (仅用于调试目的)

    import 'file:///Users/uesr_name/Desktop/flutterPlugin/flutterPlugin/lib/file.dart';
    

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2016-05-25
      相关资源
      最近更新 更多