项目中遇到的问题
有个npm包叫a,项目的dependencies有a和b两个依赖,a的版本是version1。b中也依赖了a这个包,版本是version2。在项目打包的时候,会把a的这两个版本都打进build文件中。本文主要分析对同一个包有多个版本依赖的情况。
npm如何管理node_modules
在npm 3.0版本之前,node_modules里面的依赖是一种树形的嵌套结构,这样会造成很多依赖重复安装,并且node_modules的层级会非常深。
在npm 3.0的版本中,会先分析所有的依赖关系,尽可能的把依赖层级拍平。如果一个包没有被重复依赖,它会安装在node_modules的第一层。当同一个包出现版本冲突时,会根据就近原则,把对应的依赖安装在当前包的node_modules文件夹中。
版本号管理:SemVer
SemVer的中文名称是语义化版本控制规范。npm默认使用SemVer来进行模块的版本控制。一个发布到npm的包要严格遵守SemVer的版本规范,不然会发布失败。
版本格式
主版本号.次版本号.修订号,可以用x.y.z的写法来简单表示。
- 主版本号:只有在新增了无法向下兼容的API的时候,才可以递增。
- 次版本号:只有在新增了可以向下兼容的新功能的时候,才可以递增,可以理解为feature版本。
- 修订号:只有在做了向下兼容的修正时才可以递增,可以理解为bug fix版本
先行版本
当要进行大版本迭代的时候,或者增加一些核心的功能,但又不能保证新版本百分之百正常,这个时候就