28

使用 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”

由于这似乎是一个警告,我继续将 @my/common 和 @my/common-impl 都 npm install 到另一个项目中,但是当我从 @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' resolve '@my/common/abstract-person' in 'C:\Data\me\node_modules\@my\common-impl\esm5' 解析的请求是一个使用描述的模块文件:C:\Data\me\node_modules\@my\com 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"

      }
    }
  }
}

还需要什么来纠正这个问题?

4

3 回答 3

44

我正在使用一个名为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"
    }
  }
}

这使得以下警告消失

output.globals 中没有为外部模块 'katex' 提供名称 - 猜测是 'katex'

于 2018-11-28T14:05:09.167 回答
3

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

这是问题:

monorepo我在我的项目文件夹中添加了 library1 和 library2 。

project:
   -> library1 
       -> tsconfig.lib.json
       -> ...
   -> library2 
       -> tsconfig.lib.json
       -> ...
   -> tsconfig.json 
   -> ...

tsconfig.json

{
  ...
  "compilerOptions": {
    ...
    "paths": {
      "library1": [
      "../dist/library1"
    ],
      "library2": [
      "../dist/library2"
    ],
  },
}

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

tsconfig.lib.json

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    ...
    "paths": {
      "library1": [
      "../../../dist/library1"
    ]
  },
  ...
},

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

最后我应该提到这个事实,“externals”不再存在于ng-packagrschema中。

于 2018-05-12T07:29:14.650 回答
1

就我而言,我用这种方式解决了警告。

ng-package.json

{
  "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
  "dest": "../../dist/test-lib",
  "lib": {
    "entryFile": "src/public-api.ts",
    "umdModuleIds": {
      "@libs/shared": "../../dist/shared",
      "@libs/animations": "../../dist/animations",
      "saturn-datepicker": "saturn-datepicker",
      "moment": "moment"
    }
  }
}

tsconfig.json

{
  "compileOnSave": false,
  "compilerOptions": {
    "importHelpers": true,
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "esnext",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "es2019",
      "dom"
    ],
    "allowSyntheticDefaultImports": true,
    "baseUrl": "./",
    "paths": {
      "@app/*": [ "projects/test-app/src/app/*" ],
      "@libs/*": [ "dist/*" ],
      "shared": [ "dist/shared" ],
      "shared/*": [ "dist/shared/*" ],
      "animations": [ "dist/animations" ],
      "animations/*": [ "dist/animations/*" ],
    }
  }
}
于 2020-02-11T14:52:05.953 回答