タイトルが示すように、ng generate library lib
;を使用してベースライブラリを生成しました。次に、lib2
という名前の別のライブラリを生成しました。 lib
の一部の基本コンポーネントまたはサービスを使用したいので、lib
をlib2
モジュールにインポートしましたが、npm run build lib2
が失敗しました。
次のエラーを受け取りました:error TS2307: Cannot find module 'lib'
。
ベースライブラリを適切にインポートするにはどうすればよいですか?どんな助けでもありがたいです。
テストコードを https://github.com/dyh333/ng6-test に入れました
最初にライブラリをビルドする必要があります。この質問を参照してください Angular 6 CLI-> ng build build project + librariesを作成する方法
tsconfig.json
ファイル、それはlibsのパスを追加することによって変更されました-したがって、それらをビルドしてdistフォルダーに入力する必要があります。
"paths": {
"lib": [
"dist/lib"
],
"lib2": [
"dist/lib2"
]
}
Nx拡張機能の使用の概念を拡張する回答を追加します(quickee/stubsを除くすべてのプロジェクトに使用します)。
これは、nxワークスペース内でlibをビルドするようにng-packagrが設定されていることを前提としています。
Libsなどを作成します。lib1とlib2があるとします。
ここで、lib1がlib2の何かを使用するとします。
これは少し奇妙に聞こえるかもしれませんが、それについて考えれば、そこには感覚があります。 libsは、外部アプリで使用する場合とまったく同じ方法で使用します(まったく同じではなく、リンクしていますが、package.jsonのインストールプロセスをシミュレートしています)。
また、monoリポジトリ内では、ライブラリ全体で相対インポートを使用できます(ここでも、tsconfigパスエントリを無視し、相対パスを使用して他のライブラリからファイルを取得します)。それは機能しますが、おそらく技術的には正しくありませんが、いくつかの頭痛を軽減するかもしれません。
私は大きなプロジェクトでこの質問にぶつかりましたが、解決するのは私のものでした。私はこれらの方法の両方がニーズを満たし、チームに提示され、私には彼らが言ったことには問題がないことを知りましたチームの決定)。
これがnx-extensions以外の設定で機能しない理由はないことに注意してください。しかし、私はどこでも彼らと一緒に仕事をすることはめったにありません。私がすることの大部分は、monorepo devの伝道であり、Angularに直面したとき、NXは私がチームで働いているものです。