使用淘宝镜像的正确方式

253 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

使用的两种方式

方式一:

cnpm install

方式二:

npm config set registry https://registry.npm.taobao.org/

npm install

虽然源都是指向了淘宝镜像,但两种方式还是有很大的区别,速度上的区别请看: cnpm下载依赖包速度快的原理探究

另外一个区别就是版本锁定的问题。用cnpm命令是没有版本锁定功能的,所以经常会出现重现下载依赖包后项目跑不起来的情况。而npm从v5开始用package.lock.json文件锁定版本。

接下来详细说明 package-lock.json:

1 . package-lock.json定义

官方解释:package-lock.json它会在npm更改node_modules目录树或者package.json时自 动生成的,它准确的描述了当前项目npm包的依赖树,并且在随后的安装中会根据packagelock.json来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的 更新。

2. package-lock.json生成与更新

package-lock.json会在npm install时生成。如果项目中有package-lock.json文件,会根据 package-lock.json里的内容来处理和安装依赖而不再根据package.json. 如果package-lock.json已经生成,再次更新package.json某个模块版本(包括手动更改 package.json某个版本号),然后重新npm install,package-lock.json都会自动更新到设置的版 本,所以不用担心package.json更新了,package-lock.json还是旧的问题。

3.package-lock.json格式

package-lock.json是一个包含你所有依赖的巨大列表, 它包含明确的版本号, 依赖的获取地址, 一个 用于验证完整性和正确性的哈希值, 以及这个依赖本身所需要的依赖.

4. cnpm不支持package-lock.json

  • 使用cnpm install时候,并不会生成package-lock.json文件,cnpm维护者似乎并不打算支持该功 能。 cnpm install的时候,就算你项目中有package-lock.json文件,cnpm也不会识别,仍会根据 package.json来安装 因此导致每次构建安装的依赖不一致。
  • 使用cnpm install,如果package.json依赖的版本带上^,就会安装最新的小版本。例 如: "classnames": "^2.2.6", 这个依赖包会安装 2.x.x 的最新版本,导致两次install的 版本不一样。虽然npm制定了版本号规则和更新策略,小版本是要向下兼容的,但如果依赖 包的开发者没有遵循这个规则就可能出现构建报错的情况。
  • 有人可能会说把该模块写死不就行了 "classnames": "2.2.6" ,但是假如我们依赖 classnames,classnames又依赖模块A、B等,我们安装classnames时,npm会自动帮我们 安装好classnames依赖的模块A、B等。我们把classnames锁死了,但是其引用的A模块仍用 的是^括号写法(即没有锁死版本),所以假如A模块更新了,仍可能会出现之前类似的问 题。

yarn和pnpm也支持版本锁定,你也可以用速度更快、节省磁盘空间的 pnpm


参考文章:www.jianshu.com/p/2e459040a…

欢迎评论交流

❤️ 更多前端知识欢迎关注公众号交流

qrcode_for_gh_002ca2bfa5b1_258 (1).jpg

❤️ 这里有你想知道的web前端知识