3 つの @angular プロジェクトがすべて v6.1.9 を使用している場合: host
、alpha
、およびbeta
alpha
beta
@angular/elements などを使用して、それぞれ Web コンポーネントを作成および定義します。
constructor(private injector: Injector) {}
ngDoBootstrap() {
const config: NgElementConfig = { injector: this.injector };
const component= createCustomElement(component, config);
customElements.define("alpha-component", component); // beta-component respectively
}
alpha
およびbeta
を使用してビルドされng build --prod --output-hashing none
、ビルド後のスクリプトが実行されて、結果のファイルが次の順序で連結されますscripts.js, styles.js, runtime.js, main.js
。
polyfills.js はmain.ts
、ライブラリのロード時に使用されるポリフィルが既に定義されているかどうかをチェックするため、スキップされます (たとえば、zones.js を再定義しようとするのを避けるため)。
結果のバンドルはalpha-component.bundle.js
とbeta-component.bundle.js
です。
host
タグ付きの<head>
で上記のバンドルを参照します。index.html
<script defer>
バンドルがalpha
thenの順序で参照されている場合、 2 回ブートストラップしようとしているbeta
ことがわかります。逆の順序で、ブートストラップを 2 回試みているalpha
ことがわかります。beta
最初に参照されたバンドルは 2 回ブートストラップを試行するため、バンドルの Web コンポーネントを 2 回定義しようとするため、エラーが発生し、2 番目に参照されたバンドルの Web コンポーネントは登録されません。
目標は、@angular を使用して多くの Web コンポーネントを作成し、それらを他の @angular またはinsert framework here
テクノロジー内で使用できるようにすることです。