细说 peerDependencies
问题
在开发npm插件的时候, 例如element-ui
首先element-ui基于vue, 所以它希望使用element-ui的项目, 本身拥有Vue模块
所以peerDependencies 主要用于npm插件告诉使用者, npm插件本身依赖哪些模块, 并且需要安装它
业界使用这个属性的情况
ant-design
"peerDependencies": {
"react": ">=16.0.0",
"react-dom": ">=16.0.0"
}
这个表明使用ant-design 中的react建议大于等于16.0.0版本
element-ui
"peerDependencies": {
"vue": "^2.5.17"
},
不满足条件时的警告
peerDependencies 在npm3及其之后的版本起到的作用只是提示作用
warning " > vue-loader@15.8.3" has unmet peer dependency "css-loader@*".
warning "@nuxtjs/eslint-module > eslint-loader@3.0.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning "@nuxtjs/eslint-config > eslint-plugin-vue > vue-eslint-parser@5.0.0" has incorrect peer dependency "eslint@^5.0.0".
>
表示哪个项目中引入的插件
例如第一行就表名是根项目本身引用的vue-loader插件中要求根项目有安装css-loader
但跟项目没有安装css-loader, 所以就会有这个问题
has unmet peer dependency表示peerDependency声明的依赖没安装
has incorrect peer dependency 表示peerDependency声明的依赖安装了 但是版本没对上
疑问
若使用npm模块时, 项目本身不满足npm模块peerDependencies 会发生什么?
其实只会给一句警告
例如
npm插件依赖的模块为什么不直接写在Dependencies中?
例如element-ui为什么不把vue模块 写在dependencies中,
这样无论如何使用element-ui都会有vue模块
但是这样安装的vue是在这个element-ui中的node_modules中
my-project
| - node_modules
| - vue
| - element-ui
| - node_modules
| - vue
这样打包出来就会包含两个vue模块
有peer denpendency warning的时候一定要处理吗?
不一定, 其实这也是peerDenpendency非常鸡肋的地方, 因为有可能项目是满足要求的, 但是还是会warning
为什么
例如 这个warming
warning "@nuxtjs/eslint-module > eslint-loader@3.0.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
eslint-loader声明要装webpack, 但是webpack在nuxt这个包里, 所以就检查不到项目其实有装webpack了
但实际依赖是满足要求的, 但是也会报warming
原文地址:https://www.cnblogs.com/h2zZhou/p/12923063.html
- [WCF权限控制]ASP.NET Roles授权[下篇]
- 如何解决分布式系统中的跨时区问题[实例篇]
- Visual Studio对程序集签名时一个很不好用的地方
- 一个关于解决序列化问题的编程技巧
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[上篇]
- 从数据到代码——通过代码生成机制实现强类型编程[下篇]
- 谈谈你最熟悉的System.DateTime[下篇]
- 如何解决EnterLib异常处理框架最大的局限——基于异常"类型"的异常处理策略
- [WCF权限控制]从两个重要的概念谈起:Identity与Principal[下篇]
- 收藏!6道常见hadoop面试题及答案解析
- 这是EnterLib PIAB的BUG吗?
- [WCF权限控制]基于Windows用户组的授权方式[上篇]
- EnterLib PIAB又一个BUG?
- 关于WCF的一个非常“无语”的BUG!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 用php来查询graphql
- 利用树莓派的摄像模块实现“扫码枪”
- n ../../node_modules/@storybook/channels/dist/index.d.ts:25:9 - error TS1086: An accessor cannot ...
- 要不来重新认识Spring事务?三歪又学到了
- 读者问:学完SSM,该学什么呢?
- go-zero 微服务框架介绍
- redis-cli 未找到命令的一个解决方式
- 【每日一题】42. Trapping Rain Water
- iframe跨域安全
- Efficiently traversing InnoDB B+Trees with the page directory (9.利用页目录实现对B+树的高效遍历)
- C语言 | 每日基础(37)
- 《求求大厂给个Offer》Map面试题
- C语言 | 每日基础(40)
- kubernete编排技术七:secret
- springcloud+eureka整合seata-tcc模式