Angular CLI 6:库依赖项放在哪里

Angular CLI 6: Where to put library dependencies

我正在转换库(ng-app-state) to use the angular cli, now that v6 supports libraries(耶!)。

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

How/where 我要添加第 3 方依赖项吗?

package.json,或至 projects/ng-app-state/package.json?

应该在package.json中添加为peerDependencies

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

dependencies

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

原来答案有点像 "both"。理解答案来源于此:

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

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

在我的例子中 package.json 有很多 dependenciesdevDependencies 的长列表(你可以看到它 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"
  }
}

在 运行ning 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"
  }
}

还没有人知道。

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

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

的开发中安装的

依赖项添加到package.json作为包名下的peerDependencies