角度9-目标入口点缺少依赖项

时间:2020-02-13 18:26:28

标签: angular angular9

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

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

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

Package.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起出现了这个问题。

先谢谢。

8 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:5)

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

例如:

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

至:

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

答案 2 :(得分:4)

第一个问题

您收到该错误,因为您的测试项目的node_modules/目录中未安装那些依赖项。但是我相信,按照@Renato的建议进行操作并强迫库的用户手动安装这些依赖项是错误的方法。

为了自动安装缺少的依赖项,请necessary在两个位置(在库自身内部)添加库的第三方依赖项:

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

第二个问题

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

这不适用于我的用例,因此要解决它,我必须将我的依赖项明确列入白名单。 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

答案 3 :(得分:3)

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

npm unlink *@your/package*

或仅全局

npm unlink

答案 4 :(得分:1)

我认为我刚刚解决了您所描述的情况。我有一个名为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 :(得分:0)

在导入您的库的项目中,将以下内容添加到Gtk.Align.FILL中。这样可以确保def addrow(self, title): # https://lazka.github.io/pgi-docs/#Handy-0.0/classes/ActionRow.html row = Handy.ActionRow() row.set_title(title) # Add action to row switch = Gtk.Switch() switch.set_valign(Gtk.Align.CENTER) row.add_action(switch) return row 能够解决库中子模块之间的“缺失依赖关系”。

tsconfig.json

有了这个,就不需要tsc

答案 6 :(得分:0)

就我而言,该错误与消息无关。但是消息指出了发生错误的组件,因此有所帮助。

答案 7 :(得分:0)

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