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
有很多 dependencies
和 devDependencies
的长列表(你可以看到它 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 build
和 ng test
.
的开发中安装的
依赖项添加到package.json作为包名下的peerDependencies
我正在转换库(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/orpeerDependencies
。把devDependencies
放在这里是没有意义的。
这是完整的答案。继续阅读以查看示例。
在我的例子中 package.json
有很多 dependencies
和 devDependencies
的长列表(你可以看到它 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 build
和 ng test
.
依赖项添加到package.json作为包名下的peerDependencies