Angular CLI 6:放置库依赖项的位置

时间:2018-05-05 12:44:22

标签: angular-cli angular-cli-v6

我正在转换图书馆(ng-app-state)以使用角度cli,现在是v6 supports libraries(耶!)。

在一些代码中进行脚手架和复制之后,这是我的第一个问题:

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

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

4 个答案:

答案 0 :(得分:20)

结果答案是“都是”。了解答案来自于此:

  • package.json是开发期间将使用的内容。您实际上将所有库安装在这里供您自己使用,包括用户也需要的库。您应该在项目的根目录中只有一个node_modules/目录,而不是库目录中的目录(因此只能在此处运行npm install和类似目录)。
  • projects/ng-app-state/package.json是将部署到npm的内容(构建过程中添加了一些其他字段)。因此,复制您的库用户将需要的dependencies和/或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"
  }
}

运行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 buildng test 一起安装的。

答案 3 :(得分:1)

第三方依赖项应放在dependencies的{​​{1}}

但是,如果第三方依赖项也支持ng 6,那么除了这个问题的范围之外,你还有一个不同的问题和更多的复杂性。我将简要地说,你可能不得不在他们的库上调用更新,或者开发一些调用他们库的原理图,这些原理图需要他们的ng 6版本的库存在。