Ng-packagrを使用して1つのプロジェクト@ my/common-utilをパッケージ化する場合、問題はありません。このクラスには、abstract-person.tsにAbstractPersonという抽象クラスが含まれています。
@ my/common-implという別のプロジェクトで、AbstractPersonを拡張し、@ my/common-utilパッケージ名を使用してインポートする別のPersonクラスが作成されました。 ng-packagrを使用してパッケージ化すると、次のエラーが表示されます->
Options.globalsの外部モジュール「@ my/common/abstract-person」に名前が指定されていません-「abstractPerson」を推測
警告のように思えたので、@ my/commonと@ my/common-implの両方を別のプロジェクトにnpmインストールし続けていますが、@ my/common-implからPersonクラスをインポートすると次のエラーが発生します
./node_modules/@my/common-impl/esm5/common-impl.jsのエラーモジュールが見つかりません:エラー:「C:\ Data\me \の「@ my/common/abst ract-person」を解決できませんnode_modules\@my\common-impl\e sm5 '' C:\ Data\me\node_modules\@my\common-impl\esm5 'の' @ my/common/abstract-person 'を解決するファイル:C:\ Data\me\node_modules\@my\co mmon-impl\package.json(相対パス:./esm5)説明ファイルを使用した後、フィールド「ブラウザ」に有効なエイリアス設定が含まれていません:C:\ Data\me\node_modules\@my\common-impl\package.json(相対パス:./esm5)はモジュールとして解決します
Package.jsonのexternals、globals、umdModuleIds(以下を参照)のようないくつかのことを試しましたが、これらのいずれも機能していません。
これがpackage.jsonです
{
"name": "@my/common-impl",
"version": "1.0.0-alpha.0",
"private": true,
"dependencies": {
"@my/common": "1.0.0-alpha.0"
},
"peerDependencies": {
"lodash": "^4.17.4"
},
"ngPackage": {
"$schema": "./node_modules/ng-packagr/ng-package.schema.json",
"dest": "dist/common-impl",
"workingDirectory": "../.ng_build",
"lib": {
"entryFile": "src/public_api.ts",
"externals": [
"@my/common/abstract-person"
],
"globals": {
"@my/common/abstract-person": "AbstractPerson"
},
"umdModuleIds": {
"abstract-person" : "AbstractPerson"
}
}
}
}
これを修正するにはさらに何が必要ですか?
私はkatexというnpmモジュールを使っていました。これを./ projects/myLibname/ng-package.jsonのumdModuleIds
に追加すると、うまくいきました。
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/documentations",
"lib": {
"entryFile": "src/public_api.ts",
"umdModuleIds": {
"katex": "katex"
}
}
}
これにより、次の警告が消えました
Output.globalsで外部モジュール「katex」の名前が指定されていません-「katex」を推測
ライブラリでtsconfig.lib.json
の「paths」プロパティを使用する必要があります。
これが問題です。
Library1とlibrary2を monorepo
プロジェクトフォルダーに追加します。
project:
-> library1
-> tsconfig.lib.json
-> ...
-> library2
-> tsconfig.lib.json
-> ...
-> tsconfig.json
-> ...
tsconfig.json
{
...
"compilerOptions": {
...
"paths": {
"library1": [
"../dist/library1"
],
"library2": [
"../dist/library2"
],
},
}
そして、library2コードでimport {lib1Module} from 'library1'
を使用しました。 no module lib1Module found
エラーを解決するにはlibrary2のlibrary1のパスを確認しますtsconfig.lib.json
tsconfig.lib.json
{
"extends": "../../tsconfig.json",
"compilerOptions": {
...
"paths": {
"library1": [
"../../../dist/library1"
]
},
...
},
「umdModuleIds」、「globals」、「externals」の代わりにpaths
プロパティを使用すると、おそらく問題は解決します
そして最後に、「外部」が ng-packagr
schema にもう存在しないという事実に言及する必要があります。