ng-packagr给未提供外部模块的名称

Ang*_*gle 21 angular ng-packagr

使用ng-packagr打包一个项目@ my / common-util时,没有问题。此类在abstract-person.ts中包含一个名为AbstractPerson的抽象类。

在另一个名为@ my / common-impl的项目中,创建了另一个Person类,该类扩展了AbstractPerson并使用@ my / common-util包名称将其导入。当我使用ng-packagr打包时,出现以下错误->

在options.globals中没有为外部模块'@ my / common / abstract-person'提供名称-猜测'abstractPerson'

似乎这是一个警告,我继续npm将@ my / common和@ my / common-impl都安装到另一个项目中,但是当我从@ 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中尝试了多种方法,例如外部函数,全局变量,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"

      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

要纠正此问题还需要什么?

ngf*_*ixl 23

我正在使用一个名为katex的npm模块。添加此向umdModuleIds./projects/myLibname/ng-package.json为我工作。

{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/documentations",
  "lib": {
    "entryFile": "src/public_api.ts",
    "umdModuleIds": {
      "katex": "katex"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这使得以下警告消失了

在output.globals中未提供外部模块“ katex”的名称-猜测“ katex”


小智 3

tsconfig.lib.json您应该在库中使用“paths”属性。

这就是问题所在:

我将library1和library2添加到我的monorepo项目文件夹中。

project:
   -> library1 
       -> tsconfig.lib.json
       -> ...
   -> library2 
       -> tsconfig.lib.json
       -> ...
   -> tsconfig.json 
   -> ...
Run Code Online (Sandbox Code Playgroud)

tsconfig.json

{
  ...
  "compilerOptions": {
    ...
    "paths": {
      "library1": [
      "../dist/library1"
    ],
      "library2": [
      "../dist/library2"
    ],
  },
}
Run Code Online (Sandbox Code Playgroud)

import {lib1Module} from 'library1'在library2代码中使用了。为了解决no module lib1Module found错误,我将library1路径放在library2中tsconfig.lib.json

tsconfig.lib.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    ...
    "paths": {
      "library1": [
      "../../../dist/library1"
    ]
  },
  ...
},
Run Code Online (Sandbox Code Playgroud)

paths如果您使用属性而不是“umdModuleIds”、“globals”和“externals”,您的问题可能会得到解决

ng-packagr最后我应该提到这个事实,模式中不再存在“外部” 。