设置:
鉴于以下几点
- my_library对jquery进行了广泛的运行时使用。
- 在my_library中,默认情况下通过npm所需的jquery(因为其中包含安全修复程序)。但是它也与jquery >=2.2.0兼容(但尚未在 中指定)
^3.3.1
package.json
- my_library通过npm在custom_project中使用。
- custom_project还需要outer_library,即使用不同且冲突的jquery版本(例如,假设jquery 1.7.3)。
- 而custom_project_2只需要my_library in
dependencies
。
问题:
- 安装custom_project会引发重复的依赖关系,弄乱两个库之一的jquery 。
- my_library中的jquery版本指定了一个建议的版本(为了避免严重的漏洞),但没有说明哪个jquery最低版本与my_library兼容
dependencies
最终解决方案:
为避免jquery依赖重复(outer_library 为 1.7.3,my_library为3.3.1 )我可以将我的jquery ^3.3.1从to移动,因此我将在开发中获得3.3.1而不会在生产中安装( ) 并且只安装jquery 1.7.3。dependencies
devDependencies
npm install --only=prod
但是这个:
- 不保证my_library将获得兼容的jquery版本,因此my_library很容易中断。
jquery@>=2.2.0
在my_library 中添加peerDependencies
至少会引发一个警告,要求在custom_project中手动安装特定版本来解决冲突(即使它可能无法解决)。
对我来说感觉不对,因为jquery是一个运行时
dependency
并且不应该进入devDependencies
(使用单元测试工具等)。实际上jquery不会安装在custom_project_2中,在生产上安装时(所以my_library会中断)
问题
我怎样才能满足my_library依赖的两个用例?
(A) 如果outer_library需要与我的定义 ( )兼容的jquery ,我还需要手动安装jquery吗?还是npm会解析一个通用版本?
peerDependencies
>=2.0.0
(B) 是否存在
peerDependencies
不抱怨且不需要手动安装任何东西的情况?(只要semvers受到尊重?)(A) 将jquery之类的依赖项(冲突的高概率)放在内部(尽可能松散的semver)和推荐版本的内部是否有意义?
peerDependencies
dependencies
(B) 在每个设置和NPM版本
<3
(peerDependencies 自动安装)和>=3
(需要手动安装)中都能正常工作吗?
如果您能回答部分问题,我们将不胜感激