当使用包中的组件时,我遇到了一个模糊的引用错误,其中主项目也引用了该组件的共享依赖项。我已经概述了一个示例项目和一个依赖项目来说明问题。
我的目标是拥有一个UI组件的基础库,以及一个可以继承这些组件的独立项目。我目前无法继承这些组件,因为一旦我这样做,最终会有两个编译版本 - 导致模糊的引用错误。
Dart SDK 0.6.5.0 r25017
这是我创建并导入到当前项目中的包。它定义了一个Web组件,并依赖于Web UI
。
<!DOCTYPE html>
<html><body>
<element name="my-package-component" constructor="MyPackageComponent" extends="span">
<template>My Package Component</template>
<script type="application/dart" src="MyPackageComponent.dart"></script>
</element>
</body></html>
import "package:web_ui/web_ui.dart";
class MyPackageComponent extends WebComponent
{
MyPackageComponent();
}
这是主要项目。它定义了一个派生的 Web组件,并依赖于My Package
和Web UI
。
<!DOCTYPE html>
<html><body>
<element name="my-local-component" constructor="MyLocalComponent" extends="span">
<template>My Local Component</template>
<script type="application/dart" src="MyLocalComponent.dart"></script>
</element>
</body></html>
请注意,MyLocalComponent
是MyPackageComponent
的子类。
import "package:MyPackage/MyPackageComponent.dart";
class MyLocalComponent extends MyPackageComponent
{
MyLocalComponent();
}
<!DOCTYPE html>
<html><head>
<link rel="import" href="package:MyPackage/MyPackageComponent.html"/>
<link rel="import" href="MyLocalComponent.html"/>
</head><body>
<my-local-component></my-local-component> <!-- REF 1 -->
<my-package-component></my-package-component> <!-- REF 2 -->
<!-- Dart scripts etc. -->
</body>
如果我只使用Index.html
中的本地组件(参见 REF 1 ),那么一切运行正常。当我使用打包的组件(参见 REF 2 )时,我遇到以下错误:
Internal error: 'file:[omitted]/MyProject/src/out/Index.html.dart': Error: line [omitted] pos [omitted]: ambiguous reference: 'MyPackageComponent' is defined in library 'file:[omitted]/MyProject/src/out/_from_packages/MyPackage/MyPackageComponent.html.dart' and also in 'package:MyPackage/MyPackageComponent.dart'
__t.component(new MyPackageComponent()..host = __e0);
^ [omitted]/MyProject/src/out/index.html_bootstrap.dart:0
我不确定我做错了什么或者这是一个错误。我不太可能不能使用其他软件包中的资源。
out
目录中有一个名为_from_packages
的自动生成的文件夹似乎是模糊引用的来源。 MyPackageComponent
和packages
目录中都定义了MyPackageComponent.dart
。
似乎Web UI编译器正在为导入的packages/MyPackage/MyPackageComponent.dart
生成一个类(由导入的组件专门使用),而My Project
中的原始类除外{{1}}中的原始文件。 }。