npm 与 yarn:轻松理解全局和项目依赖

npm 与 yarn:轻松理解全局和项目依赖

我不是 Node.js 的深度使用者,但是现在做一些前端开发工作总是少不了接触 npm/yarn。安装包的时候大部分情况下都是跟着文档走,这篇文章浅显易懂的说一下 npm/yarn 的全局、项目依赖关系。

npm 和 yarn 都是 Node.js 的包管理器,且大体上相互兼容,也有一些不同的特性。网上有不少关于 npm 和 yarn 的对比文章,当我花了一个多小时去对比 npm 和 yarn 之后,我放弃了对比。
从编程思维来说会很纠结,从产品思维来说,不纠结。我就做点独立开发而已,选哪个都不重要,我常用 yarn,各位看官喜欢哪个选哪个。

以下正文。

全局依赖

全局依赖,顾名思义,就是安装在你电脑全局环境中的包。这意味着,一旦你通过 npm 或 yarn 将某个包设置为全局依赖并安装,你就可以在电脑上的任何地方使用它。这对于一些工具类的包特别有用,最直接的例子就是 yarn,通常情况下是安装了 Node.js 之后,使用 npm 命令安装 yarn。

npm install -g yarn

这样安装的结果就是,我可以在终端中直接使用 yarn 命令。

image.png

项目依赖

项目依赖是指直接安装到你的项目中的包。这些包在项目的 package.json 文件中被记录,确保了项目在不同环境下的一致性和复现性。项目依赖又可以分为生产依赖(也就是运行时依赖)和开发依赖。

生产依赖: 这类依赖是项目运行时必须的,比如 React、Vue 这样的库。它们会被添加到项目的 package.json 文件的 dependencies 部分,yarn 还会同步更新 yarn.lock 文件(固定包版本,方便多设备同步开发,npm 亦有类似功能)。

开发依赖: 开发依赖则是只在开发过程中使用的包,比如单元测试工具(Jest、Mocha)、代码格式化工具(ESLint、Prettier)。这些依赖在生产环境下是不需要的,包被添加到 package.json 文件的 devDependencies 部分。

为什么区分生产依赖和开发依赖?

  • 优化生产环境:通过区分这两种依赖,可以在部署应用到生产环境时减少不必要的包,从而减少应用的体积和提高加载速度。
  • 明确依赖用途:清晰地区分哪些包是你的应用运行所必需的,哪些只是为了开发过程更加便捷。

假设你的项目中使用了 Vue 作为前端框架,那么 Vue 就是一个生产依赖。而如果你使用 ESLint 来规范代码风格,那么 ESLint 就是一个开发依赖。

通过这样的分工,可以更加合理地管理项目的依赖,既保证了项目的运行效率,也提升了开发体验。在写代码的过程中,合理地选择和区分这三种依赖,可以让你的项目更加轻便、清晰和高效。

不同依赖的包安装方法

全局依赖

npm install -g [包名]
yarn add [包名]

生产依赖

npm install [包名]
yarn add [包名]

开发依赖

npm install [包名] --save-dev/npm i [包名] -D
yarn add [包名] --dev