关于,最初是用作的包管理器,然而现在似乎已经演化成了整个的包管理工具。
而在使用过程中,和无疑是使用最多的命令,下载,删除再重新下载,这也体现出了中的包的版本管理存在问题。
npm 包版本管理
中的包采用的是规范,该规范约定了版本的格式:,对应的含义也很清楚明了,主版本号,迭代小版本,小型修复版本。
虽然有了上面的约束,但是在下载安装模块的时候,文件中的版本号并不固定,一般也是用的标记,这是什么意思?那就来看下不同版本标记的含义:
"^3.2.2" 表示的是安装中的最新版本,一般中就是这个标记,这导致了两个人在不同时间可能安装了不同小版本的模块,如和。
"~3.2.2" 表示的是安装的最新版本,不同人安装的模块就可能存在小版本差异。
"3.2.2" 只有是这样固定写法,没有任何标记才是指定版本的安装。
对于上面的这些规则,和版本其实是可以不指定的,不指定的位置的版本号可以任意,而如果左侧是的时候,右侧则版本数字也可以任意,具体的规则可以自行查阅。
总归,这样产生了一个问题,因为中的版本就是带标记的,也就是版本号并未完全确定,导致不同人的安装模块的版本号不统一,导致。
不过,这个问题,在文件出现后,基本得到了解决。该文件确定了依赖版本号和安装结构。
相比之下 yarn 有什么不一样
并不是什么另辟蹊径的产物,就是几家联合出的相对的完善加强工具,弥补早期的缺陷。
出现自然就是解决问题的:
首先需要解决的就是不同版本的问题,带有文件,确定了安装的模块的版本号,不再是一个动态的标记。模块依赖的更改都会更新文件。yarn 默认就会从中先读取确切版本再下载。
如上所言,后面的文件的出现也做到了这些,但这个时间差已经让相当一部分开发者用上了。
除了确定版本,速度上也有明显提升。在早期版本上,在不使用缓存的情况下,直接远程安装的速度要比快很多。据考察,是因为没有像一样在下载安装的中等待一个模块完成之后再开始下一个,而是同步开启所有任务。
输出更为简洁,npm会把所有日志输出到终端,警告和错误都充斥在日志中,导致关键信息很容易被遗漏。
命令修改:
->
->
->
....
在出现并被相当大一部分开发者接受之后,也都会有新的动作,比如文件的出现,缩短构建时间。可见一个竞争对手的出现会迫使使得双方一起进步,在已经的现在,相比于,也并没有明显的逊色之处。
而且,对于国内的开发者,可能经常面临换源的问题,这里的工具也是非常受用的。所以,纵使足够优秀,仍然有存在的必要,如果要选择,图省事不想引入额外工具就是,对工具有会更高要求则是。
领取专属 10元无门槛券
私享最新 技术干货