67

我正在转换一个库(ng-app-state)以使用 angular cli,现在v6 支持库(耶!)。

在搭建并复制了一些代码之后,这是我的第一个问题:

如何/在哪里添加第 3 方依赖项?

package.json,还是到projects/ng-app-state/package.json

4

5 回答 5

67

事实证明,答案是“两者兼而有之”。理解答案来自于此:

  • package.json是在开发过程中使用的东西。您实际上在这里安装了所有库供您自己使用,包括用户也需要的库。您应该只node_modules/在项目的根目录中有一个目录,而不是在库的目录中(所以只在npm install此处运行和类似)。
  • projects/ng-app-state/package.json是将部署到 npm 的内容(在构建过程中添加了一些额外的字段)。因此,复制dependencies和/或peerDependencies您图书馆的用户将需要。放在这里没有意义devDependencies

这就是完整的答案。继续阅读以查看示例。

在我的例子package.json中,有很多dependenciesdevDependencies(你可以在这里看到),但所有这些只会影响我(以及任何想要贡献的人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"
  }
}
于 2018-08-18T13:30:09.983 回答
16

它应该添加package.jsonpeerDependencies

于 2018-05-10T23:28:11.843 回答
2

还没有人知道。

我不确定这些信息是否存在于任何地方。我已经在错误跟踪器上提交了一个问题,并且它已通过分类。我相信它们将来会被记录在案。

现在据我所知,可以说工作区中的项目中与核心无关的所有 Angular 依赖项中的 100% 也必须在工作区中。它们必须在项目中,以便最终用户知道它们是必需的,因为它们会被捆绑在 dist 中。它们必须在工作区中,package.json因此它们实际上是在开发中使用ng build和安装的ng test

于 2021-08-09T13:48:12.883 回答
0

第 3 方依赖项应dependencies放在projects/ng-app-state/package.json

但是,如果第 3 方依赖项也支持 ng 6,那么您有一个不同的问题,并且超出了这个问题的范围。我将简要地说,您可能必须在他们的库上调用 ng update 或开发调用他们的原理图,期望他们的 ng 6 版本库存在。

于 2018-05-25T19:24:49.987 回答
0

依赖项在 package.json 中添加为包名称下的 peerDependencies

于 2021-08-12T10:40:08.650 回答