AOT コンパイルとカスタム パッケージで問題が発生しています。私のシナリオでは、独自のパッケージ (パッケージ A) をインストールする Angular/Cli プロジェクトがあります。パッケージ A は、サービスを含むパッケージ B に依存しています。
パッケージ A の NPM インストールにより、次の node_modules 構造が生成されます。
- node_modules
- package_a
- (package_a ファイル)
- node_modules
- package_b
- (package_b ファイル)
- test.service.ts
- package_b
- package_a
パッケージ A はパッケージ B の特定のバージョンに依存しているため、パッケージ B はネストされた node_modules フォルダー内にインストールされるため、これは理にかなっているように見えます。また、パッケージ A がパッケージ B から TestService をエクスポートすることを確認したので、利用できるようになります。
私が抱えている問題は、メイン プロジェクトからパッケージ B のサービスにアクセスしようとするときです。
app.component.ts
import { Component } from '@angular/core';
import { TestService } from 'package_a';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
providers: [TestService]
})
export class AppComponent {
constructor(
private log: TestService,
) {}
ngOnInit(): void {
// call function from package_b
}
}
まず、 ng serve を実行すると、すべてが完全に機能し、問題はまったくありません。ただし、AOT コンパイルを使用してプロジェクトをビルドしようとすると、次のエラーで失敗します: ERROR in ... モジュールが見つかりません。
パッケージ B を個別にインストールすると、そのインスタンスがメインの node_modules ディレクトリに存在し、すべてが機能します。ネストされたバージョンが異なっていても、パッケージ A で定義されているように、ネストされたバージョンを正しく使用します。
- node_modules
- package_a
- (package_a ファイル)
- node_modules
- package_b [バージョン 1.0.0]
- (package_b ファイル)
- test.service.ts
- package_b [バージョン 1.0.0]
- package_b [バージョン 2.0.0]
- (package_b ファイル)
- test.service.ts
- package_a
パッケージ B を追加インストールする必要をなくす方法はありますか? メインバージョンの前にネストされたバージョンを指すのに欠けているものはありますか?