我正在转换一个库(ng-app-state)以使用 angular cli,现在v6 支持库(耶!)。
在搭建并复制了一些代码之后,这是我的第一个问题:
如何/在哪里添加第 3 方依赖项?
到package.json
,还是到projects/ng-app-state/package.json
?
我正在转换一个库(ng-app-state)以使用 angular cli,现在v6 支持库(耶!)。
在搭建并复制了一些代码之后,这是我的第一个问题:
如何/在哪里添加第 3 方依赖项?
到package.json
,还是到projects/ng-app-state/package.json
?
事实证明,答案是“两者兼而有之”。理解答案来自于此:
package.json
是在开发过程中使用的东西。您实际上在这里安装了所有库供您自己使用,包括用户也需要的库。您应该只node_modules/
在项目的根目录中有一个目录,而不是在库的目录中(所以只在npm install
此处运行和类似)。projects/ng-app-state/package.json
是将部署到 npm 的内容(在构建过程中添加了一些额外的字段)。因此,复制dependencies
和/或peerDependencies
您图书馆的用户将需要。放在这里没有意义devDependencies
。这就是完整的答案。继续阅读以查看示例。
在我的例子package.json
中,有很多dependencies
和devDependencies
(你可以在这里看到),但所有这些只会影响我(以及任何想要贡献的人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"
}
}
它应该添加package.json
为peerDependencies
我不确定这些信息是否存在于任何地方。我已经在错误跟踪器上提交了一个问题,并且它已通过分类。我相信它们将来会被记录在案。
现在据我所知,可以说工作区中的项目中与核心无关的所有 Angular 依赖项中的 100% 也必须在工作区中。它们必须在项目中,以便最终用户知道它们是必需的,因为它们会被捆绑在 dist 中。它们必须在工作区中,package.json
因此它们实际上是在开发中使用ng build
和安装的ng test
。
第 3 方依赖项应dependencies
放在projects/ng-app-state/package.json
但是,如果第 3 方依赖项也支持 ng 6,那么您有一个不同的问题,并且超出了这个问题的范围。我将简要地说,您可能必须在他们的库上调用 ng update 或开发调用他们的原理图,期望他们的 ng 6 版本库存在。
依赖项在 package.json 中添加为包名称下的 peerDependencies