web-dev-qa-db-ja.com

ng-packagrは外部モジュールに名前が提供されていません

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"

      }
    }
  }
}

これを修正するにはさらに何が必要ですか?

17
AngularAngle

私はkatexというnpmモジュールを使っていました。これを./ projects/myLibname/ng-package.jsonumdModuleIdsに追加すると、うまくいきました。

{
  "$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」を推測

21
ngfelixl

ライブラリで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 にもう存在しないという事実に言及する必要があります。

2
Hasan Beheshti