我已将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起出现了这个问题。
先谢谢。
答案 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
。问题消失了。