谈谈对 npm、cnpm、npx、pnpm、yarn 的了解?

阅读 2.1k
3 个回答

它们都是 node 的包管理工具:

  • npm 是一个 NodeJS 包管理 和 分发工具,是开源、免费的包管理器,便于下载和分享资源

    • npm install 流程
      image.png
  • cnpm 是方便中国开发者下载依赖包而诞生的下载器,可以认为是国内版的 npm
  • npx 是 npm5.2 版本新增的一个命令

    • 可用来调用项目内部安装的模块,通常执行项目内部模块需要执行 nodemodule/bin/xxx command,而使用 npx 可以简化这个写法,等价于 npx [xxx] command 
    • 可避免全局安装模块,比如若需要通过 create-react-app 来创建 react 项目,那必须先正在全局安装该模块
    • 原理:npx 运行的时候,会到 node_modules/.bin 路径 和 环境变量 $PATH 里面,检查命令是否存在
  • yarn 是为了解决早期 npm 存在的一些问题:不支持离线模式、树形结构的依赖、依赖安装不确定性等

    • 相对于早期 npm  的优势:支持离线安装(npm@5 已支持)、依赖扁平化结构(npm@3 已支持)、依赖安装确定性yarn.lock(npm@5 增加了 package-lock.json)、安装速度快并行下载、安装失败自动重试
    • yarn install 流程
      image.png
  • pnpm 使用了类似于 linux 的【软连接】方式,使得一个模块文件可以在多处复用,解决了 yarn、npm 在多个项目安装同一个依赖时,会下载重复文件的问题,避免磁盘的浪费,同时大大提升下载速度

    • pnpm 运行起来非常的快,超过了 npm 和 yarn
    • pnpm 利用【硬链接】和【符号链接】来避免复制所有本地缓存源文件,即多个项目相同的依赖只会在某处安装一次,连接过来直接使用,节省了 安装时间 和 磁盘空间
    • pnpm 继承了 yarn 和 新版 npm 的所有优点,包括离线模式和确定性安装
    • 但链接在一些场景下会存在兼容的问题,例如 Electron 应用无法使用 pnpm
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

npm 是 Node.js 的包管理器,用于安装和管理 Node.js 库和应用程序。cnpm 是淘宝团队开发的 npm 的镜像,它解决了 npm 在国内下载速度慢的问题。npx 是 npm@5.2 版本引入的一个命令,它允许你在不安装包的情况下运行包的二进制文件。

yarn 和 pnpm 都是基于 npm 包管理器的变种,它们解决了早期 npm 的一些缺点,例如下载速度慢,不能离线下载等。yarn 默认会生成锁定文件,而 npm 需要通过 shrinkwrap 命令生成 npm-shrinkwrap.json 文件才能记录和更新 packages 版本信息。

  1. npm:npm(Node Package Manager)是 Node.js 官方的包管理工具,它是 Node.js 安装的一部分,用于安装和管理 Node.js 模块。npm 具有强大的功能,例如版本管理、依赖关系管理、脚本执行等。
  2. cnpm:cnpm(npm 的中国镜像)是 npm 的国内镜像,用于加速 npm 的下载速度。使用 cnpm 时,您可以通过在 npm 命令前加上 cnpm 前缀来代替 npm。
  3. npx:npx 是一个 Node.js 工具,用于在本地运行临时安装的包。它可以让您无需全局安装某个包就能使用该包的命令行工具,从而提高了代码的可移植性和可重用性。
  4. pnpm:pnpm 是一个快速、轻量级、依赖关系优化的包管理器。与 npm 不同,pnpm 在本地创建软链接来共享依赖项,从而减少了磁盘空间的占用和安装依赖项的时间。
  5. yarn:yarn 是 Facebook 开源的一个包管理器,用于安装和管理 JavaScript 模块。与 npm 不同,yarn 通过并行安装依赖项、缓存下载的依赖项、提供更好的错误信息等方面提高了速度和可靠性。
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
推荐问题
宣传栏