npm和yarn哪里不一样
npm是啥?
npm是javascript的包管理工具,是前端模块化下的一个标志性产物。简单地说,就是通过npm下载模块,复用已有的代码,提高工作效率。
其实在最早期的npm版本(npm v2),npm的设计可以说是非常的简单,在安装依赖的时候会将依赖放到 node_modules文件中。
安装机制
- npm install执行之后, 首先会检查和获取 npm的配置
优先级为: 项目级的.npmrc文件 > 用户级的 .npmrc文件 > 全局级的 .npmrc > npm内置的 .npmrc 文件 - 检查项目中是否有 package-lock.json文件
- 有, 检查 package-lock.json和 package.json声明的依赖是否一致:
- 一致, 直接使用package-lock.json中的信息,从网络或者缓存中加载依赖
- 不一致
npm version <= v5.0.x 根据package-lock文件下载,
npm version v5.1.5-v5.4.2 当package.json声明的依赖版本规范有符合的版本时,会忽略lock文件。安装package.json安装,并在安装后更新lock文件。
npm version >= v5.4.2 当package.json声明的依赖版本规范和lock文件中的版本对比,相符合则按照lock文件安装依赖,若不符合则按照package.json安装,并在安装后更新lock文件。
- 没有 根据package.json递归构建依赖树
- 根据依赖树检索是否有缓存
- 有 直接获取缓存中的依赖解压到 node_modules
- 没有 从npm远端仓库下载包,校验包的完整性,同时添加到缓存中,解压到 node_modules
- 生成 package-lock.json 文件
缺点
- 速度慢
- 安装的无法保持一致性
- 存在嵌套地狱
- 输出冗长
优点
官方推荐
yarn是啥?
yarn 是一个由Facebook、Google、Exponent和Tilde构建的新的JavaScript包管理器。它的出现是为了解决历史上npm的某些不足
安装机制
- 检测(checking)
检测我们的项目中是否存在npm相关的文件,比如package-lock.json等;如果有,就会有相关的提示用户注意:这些文件可能会存在冲突。在这一步骤中 也会检测系统OS, CPU等信息 - 解析包(Resolving Packages)
析依赖树中的每一个包的信息
- 获取首层依赖
dependencies、devDependencies、optionalDependencies - 获取包的依赖信息
遍历首层依赖的方式
- 获取包
- 链接包
- 构建包
优点
- 并行安装
- 离线安装
- 版本统一
- 输出简洁
- 更好的语义化