【问题标题】:Angular 9 - The target entry-point has missing dependenciesAngular 9 - 目标入口点缺少依赖项
【发布时间】:2020-05-29 13:04:20
【问题描述】:

我已将 Angular 库升级到 Angular 9。但是,当我尝试在另一个 Angular 9 项目中使用该库时,我收到如下错误:

目标入口点“mycomponents/entity-selector”缺少依赖项:

 - mycomponents/shared-services
 - mycomponents/spinner
 - mycomponents/text-input

包.json

{
  "$schema": "../../../node_modules/ng-packagr/package.schema.json",
  "name": "entity-selector",
  "version": "0.0.0",
  "ngPackage": {
    "lib": {
      "entryFile": "public_api.ts"
    },
    "dest": "../../../dist/mycomponents/entity-selector"
  }
}

这是一个次要终点,它使用其他也是次要终点的组件。

在库项目中,我是否需要在 ng-packgr 或其他地方定义依赖项?实体选择器组件的模块为其他组件导入适当的模块。这个问题从 Angular 9 开始出现。

提前致谢。

【问题讨论】:

  • 你能发布你图书馆的 package.json 的相关部分吗?
  • @ScottWalter 你找到解决方案了吗?我有同样的问题
  • 还有答案吗?
  • 尚无解决方案。然而,这不是最近的焦点,但我确实需要回到它。

标签: angular angular9


【解决方案1】:

对于 Angular 和 Primeng 9

目标入口点“primeng”中的错误缺少依赖项:

  • chart.js

我之前的导入:

import {ToastModule} from "primeng";

解决方案:

import {ToastModule} from "primeng/toast";

【讨论】:

    【解决方案2】:

    ngx-quill 需要库 quill 已经安装 所以只要添加这个就解决了我的问题

    npm i quill@^1.3.7

    【讨论】:

      【解决方案3】:

      使用npm run start 启动我的Angular 项目时出现The target entry-point has missing dependencies 错误。一个对我有用的简单解决方案是将我的项目从 GIT 克隆到我本地机器上的一个新文件夹中,然后在一个干净的项目上运行 npm installnpm run start。问题消失了。

      【讨论】:

        【解决方案4】:

        我想我刚刚解决了您描述的情况。我有一个名为 my-pkg 的 NPM 包,其中包含多个“库”(使用 ng g library lib[1..N] 等创建)。碰巧我的libN 依赖于lib1。当我尝试在应用程序中使用 libN 时,我收到错误:

        The target entry-point "my-pkg/libN" has missing dependencies:
         - lib1
        

        这是我最初将lib1 导入libN 的方式:

        // libN.component.ts
        import { Lib1Comp } from 'lib1';
        

        这在我构建 my-pkg 时有效。问题是“lib1”不能解析为我的应用程序node_modules 文件夹中的顶级包。在那里,它应该被称为my-pkg/lib1。所以,让我们更改libN.component.ts 中的导入:

        // libN.component.ts
        import { Lib1Comp } from 'my-pkg/lib1'; // note lib1 is now prefixed with my-pkg
        

        当然,我们没有在my-pkg 的node_modules 中安装my-pkg,所以它找不到my-pkg/lib1,现在my-pkg 没有构建。

        但是如果我们能够“安装”my-pkg 到它自己的 node_modules 文件夹中呢?让我们尝试通过 NPM 脚本将其复制到那里:

        // package.json
        ...
        "scripts": {
            "copy:lib1": "npx copy .\\dist\\lib1\\**\\* .\\node_modules\\my-pkg\\lib1",
            "build:lib1": "ng build --prod lib1 && npm run copy:lib1",
            // repeat copy/build scripts as needed for libs[2..N]
            "build:pkg": "npm run build:lib1 && npm run build:libN"
        },
        

        现在,我们运行npm run build:pkg。它构建lib1,然后将其复制到我们本地的node_modules 文件夹,现在libN 可以愉快地从您的库和应用程序中的路径my-pkg/lib1 导入!

        【讨论】:

          【解决方案5】:

          在导入库的项目中,将以下内容添加到tsconfig.json。这确保了tsc 能够解决库中子模块之间的“缺失依赖关系”。

           "compilerOptions": {
              "paths": {
                "mycomponents/*": [
                  "./node_modules/mycomponents/*"
                ],
          

          有了这个,就不需要whitelistedNonPeerDependencies了。

          【讨论】:

            【解决方案6】:

            第一个问题

            您收到该错误是因为您的测试项目没有在其node_modules/ 目录中安装这些依赖项。但我相信按照@Renato 的建议去做并强制库的用户手动安装这些依赖项是错误的方法。

            为了自动安装缺少的依赖项,necessary 在两个地方(在库本身内)添加库的第 3 方依赖项:

            • package.json 在库的根目录。我相信你已经做到了。 将所有包放在此处可确保在您运行项目进行开发时,根目录下只有一个 node_modules/ 目录。
            • projects/entity-selector/package.json 是 Angular 在构建库时生成的 package.json 文件的基础文件。有必要在此处添加依赖项,以便库的使用者知道他们(嗯,他们的包管理器)需要下载哪些包。我相信这就是您目前所缺少的。

            第二个问题

            在将我的依赖项正确添加到这两个地方后,我收到构建错误,告诉我应该为我的库使用“peerDependencies”而不是“依赖项”。

            这不适用于我的用例,所以为了解决这个问题,我必须明确地将我的依赖项列入白名单。这样做 looks a little different 取决于您使用的是以下哪个:

            • projects/entity-selector/package.json
            • projects/entity-selector/ng-package.json


            projects/entity-selector/package.json 中应该是:

            {
              "$schema": "../../../node_modules/ng-packagr/package.schema.json",
              "ngPackage": {
                "lib": {
                  "entryFile": "public_api.ts"
                },
                "dest": "../../../dist/mycomponents/entity-selector",
                "whitelistedNonPeerDependencies": [
                  "mycomponents/shared-services",
                  "mycomponents/spinner",
                  "mycomponents/text-input"
                ]
              }
            }
            

            projects/entity-selector/ng-package.json 中应该是:

            {
              "$schema": "./node_modules/ng-packagr/package.schema.json",
              "lib": {
                "entryFile": "public_api.ts"
              },
              "whitelistedNonPeerDependencies": [
                "mycomponents/shared-services",
                "mycomponents/spinner",
                "mycomponents/text-input"
              ]
            }
            

            最后,不要忘记使用ng build --prod 构建您的项目,否则当您尝试发布到 NPM 时,您会收到关于新 Ivy 编译器的error

            【讨论】:

            • 啊,今天晚些时候让我试一试。我们有一个 Angular 工作区项目,其中有一个组件库和一个示例应用程序。我将组件(辅助端点)定位到 dist 目录中。而且我们每个第二个端点只有一个 package.json 而不是 ng-package.json
            • 这是真正帮助我的答案。谢谢!
            【解决方案7】:

            我有同样的问题。这是在添加符号链接之后出现的,所以我不得不使用

            npm unlink *@your/package*
            

            或者只是全局

            npm unlink
            

            【讨论】:

            • 谢谢。我浪费了将近半天的时间,然后意识到这是@AverageProgrammer 的问题
            【解决方案8】:

            修改你的组件项目,将绝对路径改为相对路径。

            如:

            import {xxx} from 'src/xxx/xxx.module';
            

            到:

            import {xxx} from '../../xxx/xxx.module';
            

            【讨论】:

            • 我用这个修改解决了我的问题。谢谢!
            【解决方案9】:
            ERROR in The target entry-point "primeng" has missing dependencies: - chart.js
            
            ERROR in The target entry-point "primeng" has missing dependencies: - quill
            
            ERROR in The target entry-point "primeng" has missing dependencies: - @fullcalendar/core
            
            
            npm install --save chart.js
            npm install --save quill
            npm install --save @fullcalendar/core
            

            【讨论】:

            • 请避免发布纯代码答案。尝试添加有关粘贴代码的更多信息。
            • 升级 Angular 版本会如何导致依赖丢失?
            猜你喜欢
            • 1970-01-01
            • 2021-10-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-12
            • 2021-05-04
            • 1970-01-01
            • 2021-11-16
            相关资源
            最近更新 更多