パッケージのコンポーネントを使用しているときに、プライマリ プロジェクトがそのコンポーネントの共有依存関係も参照している場合、あいまいな参照エラーが発生しました。問題を説明するサンプル プロジェクトと依存関係プロジェクトの概要を説明しました。
私の目標は、UI コンポーネントのベース ライブラリと、それらのコンポーネントをサブクラス化できる別のプロジェクトを用意することです。現在、これらのコンポーネントをサブクラス化することはできません。サブクラス化するとすぐに、コンパイルされたバージョンが 2 つになり、あいまいな参照エラーが発生するためです。
Dart SDK 0.6.5.0 r25017
マイパッケージ
これは、現在のプロジェクトに作成してインポートしたパッケージです。単一の Web コンポーネントを定義し、 に依存していWeb UI
ます。
MyPackageComponent.html
<!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>
MyPackageComponent.dart
import "package:web_ui/web_ui.dart";
class MyPackageComponent extends WebComponent
{
MyPackageComponent();
}
私のプロジェクト
これは主要なプロジェクトです。単一の派生Web コンポーネントを定義し、 および に依存しMy Package
ますWeb UI
。
MyLocalComponent.html
<!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.dart
MyLocalComponent
からサブクラス化されていることに注意してくださいMyPackageComponent
。
import "package:MyPackage/MyPackageComponent.dart";
class MyLocalComponent extends MyPackageComponent
{
MyLocalComponent();
}
索引.html
<!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
Web UI コンパイラは、 の他の場所で参照されてMyPackageComponent.dart
いる元の に加えて、インポートされた (インポートされたコンポーネントによって特に使用される)のクラスを生成しているようです。packages/MyPackage/MyPackageComponent.dart
My Project