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

Eri*_*ton 39 angular-cli angular-cli-v6

我正在转换库(ng-app-state)以使用angular cli,现在v6支持库(yay!).

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

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

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

Eri*_*ton 27

事实证明答案是"两种".理解答案来自:

  • 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

在运行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"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 清澈如泥。库 package.json 中确切内容的文档在哪里? (2认同)

Lal*_*Lal 12

它应该添加package.jsonpeerDependencies

  • @NathanFriend,是的,您必须这样做。这正是 lib 的 `peerDependencies` 所指向的 - 请安装以下依赖项以使用该库。 (2认同)