太原网站制作_太原网站建设_太原做网站_秘密武器开发者中心
历史搜索

深入剖析 npm & yarn 包管理机制

游客2025-01-23 16:30:01
目录文章目录
  1. 背景
  2. npm 内部机制和背后的思考
  3. yarn 安装理念以及破解依赖管理困境
  4. npm 与 yarn 对比
  5. [拓展]npm 企业级部署私服原理
  6. 管理项目依赖的小技巧(集思广益…)

深入剖析 npm & yarn 包管理机制 1

实际上,更优雅的方式是使用 npm dedupe 命令达到上述结构。而 yarn 在安装依赖时会自动执行 dedupe 命令。

正是由于上述一些 npm 历史的坑,所以更建议使用 yarn 作为项目协作的包管理工具。当然 npm 发展至今,很多问题已经优化掉,现在 yarn 和 npm 是两款互相看齐、互相获取灵感的依赖管理工具。

npm 与 yarn 对比

这里简单对比 npm v6 和 yarn v1. 这是我们生产开发常用的版本。

npm 和 yarn 作为两款相似的包管理工具,在一些功能实现上它们互相获取灵感。

相同点:

  • package.json 作为项目依赖描述文件。
  • node_modules 作为依赖存储目录,yarn v2 不再是这样。
  • lockfile 锁定版本依赖,在 yarn 中叫 yarn.lock,在 npm 中叫 package-lock.json,在 npm v7 也支持了 yarn.lock。它确保在不同机器或不同环境中,能够得到稳定的 node_modules 目录结构。

差异:

  • 依赖管理策略。
  • lockfile。package-lock.json 自带版本锁定+依赖结构,你想改动一些依赖,可能影响的范围要比表面看起来的复杂的多;而 yarn.lock 自带版本锁定,并没有确定的依赖结构,使用 yarn 管理项目依赖,需要 package.json+yarn.lock 共同确定依赖的结构。
  • 性能。(对比 npm v6 和 yarn v1)目前 npm v7 优化了缓存和下载网络策略,性能的差异在缩小。

[拓展]npm 企业级部署私服原理

npm 中的源(registry),其实就是一个查询服务。以 npmjs.org 为例,它的查询服务网址是 https://registry.npmjs.org/,在这个网址后加上依赖的名字,就会得到一个 JSON 对象,里面包含了依赖所有的信息。例如:

  • https://registry.npmjs.org/react
  • https://registry.npm.taobao.org/react

我们可以通过 npm config set registry 命令来设置安装源。你知道我们公司为什么要部署私有的 npm 镜像吗?虽然 npm 并没有被屏蔽,但是下载第三方依赖包的速度依然较缓慢,这严重影响 CI/CD 流程或本地开发效率。通常我们认为部署 npm 私服具备以下优点:

  1. 确保高速、稳定的 npm 服务
  2. 确保发布私有模块的安全性
  3. 审核机制可以保障私服上 npm 模块质量和安全

部署企业级私服,能够获得安全、稳定、高速的保障。

管理项目依赖的小技巧(集思广益…)

  1. 推荐使用 yarn 作为团队包管理工具,而不是 npm。尽管在 npm v6 之后的版本趋向稳定和安全,但由于历史原因和团队管理兼容性,仍然是推荐使用 yarn 作为团队统一的包管理工具。
  2. 项目中一定要存在 lockfile 文件,且禁止手动修改,因为这是项目稳定性运行的保障。
  3. 如果 yarn.lock 在代码合并的过程中出现了问题,可以尝试使用 yarn install 解决问题。

以上文章来源于 ELab 团队 ,作者 ELab.zhangqiang

标签:npm

本文是由用户"游客"发布,所有内容的版权归原作者所有。没有经过书面许可,任何单位或个人不得以任何形式复制、转载、引用本网站的内容。否则将追究法律责任。

相关专题