我正在转换图书馆(ng-app-state)以使用角度cli,现在是v6 supports libraries(耶!)。
在一些代码中进行脚手架和复制之后,这是我的第一个问题:
我如何/在哪里添加第三方依赖项?
至package.json
,或projects/ng-app-state/package.json
?
答案 0 :(得分:20)
结果答案是“都是”。了解答案来自于此:
package.json
是开发期间将使用的内容。您实际上将所有库安装在这里供您自己使用,包括用户也需要的库。您应该在项目的根目录中只有一个node_modules/
目录,而不是库目录中的目录(因此只能在此处运行npm install
和类似目录)。projects/ng-app-state/package.json
是将部署到npm的内容(构建过程中添加了一些其他字段)。因此,复制您的库用户将需要的dependencies
和/或peerDependencies
。没有意义将devDependencies
放在这里。那是完整的答案。继续阅读以查看示例。
在我的情况下,package.json
的清单很长,其中包含许多dependencies
和devDependencies
(您可以看到here),但这一切只会影响我(以及任何人谁想为ng-app-state
做贡献)。 projects/ng-app-state/package.json
小得多,这就是影响我的图书馆用户的原因:
{
"name": "ng-app-state",
"version": "8.0.0",
"author": "Simonton Software",
"license": "MIT",
"repository": "simontonsoftware/ng-app-state",
"peerDependencies": {
"@angular/common": ">=6.0.0 <7.0.0",
"@angular/core": ">=6.0.0 <7.0.0",
"@ngrx/store": ">=6.0.0 <7.0.0",
"micro-dash": ">=3.5.0 <4.0.0"
}
}
运行ng build np-app-state --prod
生成要发布到npm的内容后,这就是dist/ng-app-state/
(应该发布的内容)中的结果:
{
"name": "ng-app-state",
"version": "8.0.0",
"author": "Simonton Software",
"license": "MIT",
"repository": "simontonsoftware/ng-app-state",
"peerDependencies": {
"@angular/common": ">=6.0.0 <7.0.0",
"@angular/core": ">=6.0.0 <7.0.0",
"@ngrx/store": ">=6.0.0 <7.0.0",
"micro-dash": ">=3.5.0 <4.0.0"
},
"main": "bundles/ng-app-state.umd.js",
"module": "fesm5/ng-app-state.js",
"es2015": "fesm2015/ng-app-state.js",
"esm5": "esm5/ng-app-state.js",
"esm2015": "esm2015/ng-app-state.js",
"fesm5": "fesm5/ng-app-state.js",
"fesm2015": "fesm2015/ng-app-state.js",
"typings": "ng-app-state.d.ts",
"metadata": "ng-app-state.metadata.json",
"sideEffects": false,
"dependencies": {
"tslib": "^1.9.0"
}
}
答案 1 :(得分:11)
应将package.json
添加为peerDependencies
答案 2 :(得分:2)
我不确定此信息是否存在任何地方。我已经在错误跟踪器上提交了一个问题,它已经通过了分类。我相信他们将来会被记录下来。
就我目前的理解,可以说工作区中项目中所有与核心无关的 Angular 依赖项 100% 也必须在工作区中。他们必须在项目中,所以他们的最终用户知道他们是必需的,因为这将被捆绑在 dist 中。它们必须位于工作区的 package.json
中,因此它们实际上是在开发中与 ng build
和 ng test
一起安装的。
答案 3 :(得分:1)
第三方依赖项应放在dependencies
的{{1}}
但是,如果第三方依赖项也支持ng 6,那么除了这个问题的范围之外,你还有一个不同的问题和更多的复杂性。我将简要地说,你可能不得不在他们的库上调用更新,或者开发一些调用他们库的原理图,这些原理图需要他们的ng 6版本的库存在。