2

パッケージのコンポーネントを使用しているときに、プライマリ プロジェクトがそのコンポーネントの共有依存関係も参照している場合、あいまいな参照エラーが発生しました。問題を説明するサンプル プロジェクトと依存関係プロジェクトの概要を説明しました。

私の目標は、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_packagesMyPackageComponentpackages

Web UI コンパイラは、 の他の場所で参照されてMyPackageComponent.dartいる元の に加えて、インポートされた (インポートされたコンポーネントによって特に使用される)のクラスを生成しているようです。packages/MyPackage/MyPackageComponent.dartMy Project

4

0 に答える 0