npm依赖和版本在日常开发中,我们使用一个集中的package.json配置文件来维护项目配置信息(如名称、版本、许可等元数据)和依赖的模块依赖类型目前支持以下几种5dependenciesdevDependenciespeerDependenciesoptionalDependenciesbundledDependencies/bundleDependencies示例{“name”:“quanerp-pc-v4”,“version”:“4.0.0”,“private”:true,“dependencies”:{“react”:“^16.13.0”,"rxjs":"^6.5.4"},"devDependencies":{"cross-env":"^7.0.2","eslint":"^6.8.0","mockjs":"^1.1.0",},"peerDependencies":{},"optionalDependencies":{},"bundledDependencies":[],}dependencies运行项目的依赖,打包发布需要的npminstallpackageName--save#或者npminstallpackageName-SdevDependencies开发模式下的依赖只在开发环境中使用,打包后的文件不包含npminstallpackageName--save-dev#或npminstallpackageName-DpeerDependencies等同(companion)依赖第一次看到我当时也是一头雾水。从字面上很难理解它的功能。举个栗子说明一下,我写了一个npm包vue-element-utils。它的作用是为element-ui做一些自定义规范的扩展工具,如果我在下载安装element-ui之前使用它,会报错。这里我们将element-ui添加到peerDependencies中。下载时会判断当前依赖中是否有element-ui。如果没有,它将安装声明的依赖项。如果存在,则忽略peerDependencies中的声明。它还可以处理核心依赖库被重复下载。问题。在npmv3中,移除了peerDependencies,进行了内部优化,并扁平化了依赖树结构。在npmv3中,依赖树的生成会尽可能扁平,peerDependencies的行为也会随之改变。peerDependencies中声明的依赖,如果项目没有显式依赖并安装,则不会被npm自动安装,而是输出警告日志optionalDependencies如果依赖模块可以使用,你也希望找不到该模块orcannotbegetting当npm继续运行时,可以将这个模块依赖放入optionalDependencies配置中。这个配置的写法和dependencies一样,不同的是这里写的模块安装失败不会导致npminstall失败。注意:optionalDependencies中的配置会覆盖dependencies中的配置,最好只写一处。bundledDependencies/bundleDependencies打包依赖是一个包含依赖包名的数组对象。发布时,该对象中的包会被打包成最终的发布包。当执行npmpack时,数组中的声明将被打包到目标包中。依赖版本Dependencyhell通俗地说,“依赖地狱”就是开发者在安装某个软件包时,发现该软件包依赖于其他不同特定版本的软件包。随着系统功能越来越复杂,依赖的软件包也越来越多,依赖关系也越来越深。这时候可能会面临版本控制被锁定的风险。因此,Github起草了一个指导性的、统一的版本号表示规则,称为SemanticVersioning语义版本化,简称semver。这个规则规定了版本号如何表示,如何递增,如何比较,不同版本号的含义依赖库版本的解析也符合语义程序版本规范,同时增加了版本解析的灵活性.在node-semver的基础上,引入了operatorComparators。比较器默认=comparatordescription<例如<2.0.0,指向小于2.0.0的版本<=eg<=2.0.0,指向小于等于2.0.0的版本>eg>2.0。0,指向大于2.0.0的版本>=eg>=2.0.0,指向小于等于2.0.0的版本=eg=2.0.0,指向等于2.0.0的版本交集使用连接两个比较器的空格,匹配交集的版本号。比如vue:>1.0.0<=1.2.0,表示匹配的vue版本在区间(v1.0.0,v1.2.0](数学表示[包括,(不包括,下面都是这样表示的)联合联合运算符使用||连接两个比较器,匹配联合内的版本号。例如vue:<1.0.0||>=2.0.0,表示vue版本在区间[v0.0.0,v1.0.0)和[v2.0.0,正无穷大]预发布标签前面的版本号作为比较器中的版本时number包含之前的版本号,无论是什么类型的comparator,都只能匹配同一个主版本号。这个版本号。修订号,例如>=3.1.1-beta.3只能匹配区间[v3.1.1-beta.3,v3.1.2)X-Ranges通配符用字符X,x,*代替版本中的数字,表示该段可以匹配。例如*相当于>=0.0.02.x相当于>=2.0.0<3.0.03.1.x相当于>=3.1.0<3.2.0单独声明版本号时,空格version段用x填充,例如:space=*2=2.x.x2.1=2.1.xTildeRanges~当minor版本号不为空时,匹配范围只包含revisionnumber变化.2~2.1=>=2.1.0<2.2.0~2=>=2.0.0<3.0.0~2.1.1-beta.2=>=2.1.1-beta.2<2.1.1~0=>=0.0。0<1.0.0CaretRanges^匹配与声明中第一个非零版本字段号相同的版本^3.1.3=>=3.1.3<4.0.0^0.4.2=>=0.4。2<0.5.0^0.0.3=>=0.0.3<0.0.4其他版本类型npmyarn也支持扩展版本号声明,支持git、github等:http://....:指定一个available下载的urlgiturl:指向一个git项目路径user/repo:指定一个用户在github上的项目tag:指向一个标签commit,建议标签名不要以v开头,以免与versionnumberfile:path/to/local/file:指向本地环境文件上的giturl,user/repo都支持commit-ish作为后缀指向一个commit,一个tag或者一个branch配套参考资料浅谈npm依赖与版本Semver(语义版本号)扫盲npm依赖包管理你需要知道的
