阅读 559

npm和yarn中软链接的异同

什么是软链接

软链接(符号链接)在linux中是一个很常见的概念,在windows中也很常见,最常见的形式应该就是快捷方式了。创建一个软链接并不会将原来的文件或文件夹复制一份,而是创建了一个文件,指向源文件的地址。类似索引或者指针。这样可以方便文件的多处访问,也减少了硬盘的冗余数据。

软链接在开发中的应用

当我们在开发一个项目时,经常会出现我们所编写的代码中会使用许多工具方法,但是这些工具方法又可以单出抽出作为一个个lib使用的情况,这种情况下一般会采取monorepo的代码仓库形式,以开源社区最常用的文件结构为例:

|-packages
|--pkg1
|---src
|---package.json
|--pkg2
|---src
|---package.json
|-package.json
复制代码

当项目中pkg1需要依赖pkg2时,如果调试时使用的是发布后的文件会很不方便,这时就需要将依赖链接到本地源文件。

临时软链接

  1. 在全局创建pkg2的链接
cd pkg2
npm link
复制代码
cd pkg2
yarn link
复制代码
  1. 在pkg1中引用pkg2的链接
cd pkg1
npm link pkg2
复制代码
cd pkg1
yarn link pkg2
复制代码

npm额外提供了一种不需要将pkg2链接到全局中的命令

cd pkg1
npm link ../pkg2
复制代码

但是上面的两种方法都不会在pkg1package.json中显式声明对pkg2的依赖,每次重新安装依赖时还需要重新进行link,很不方便,所以npmyarn还提供了一种能够显式声明的方式。

持久软链接

cd pkg1
npm install ../pkg2
复制代码
cd pkg1
yarn add file:../pkg2
复制代码

这两种方式都会在pkg1package.json的文件中声明依赖"pkg2": "file:../pkg2",但是又有一些区别。 使用npm安装的依赖在node_modules中是以软链接的形式存在的,而yarn则是创建了一个原文件的硬链接,这样在调试时,对pkg2的修改也无法实时反馈到pkg1中了。

如果想使用yarn添加软链接的话,应该使用

cd pkg1
yarn add link:../pkg2
复制代码

这样获得的效果与npm install ../pkg2是一致的,但是,yarnpackage.json中添加的声明依赖为"pkg2": "link:../pkg2",npm是无法解析这个声明形式的。所以npmyarn请谨慎混用。

参考文档

文章分类
前端
文章标签