什么是软链接
软链接在linux中是一个很常见的概念,在windows中也很常见,最常见的形式应该就是快捷方式了。创建一个软链接并不会将原来的文件或文件夹复制一份,而是创建了一个文件,指向源文件的地址。类似索引或者指针。这样可以方便文件的多处访问,也减少了硬盘的冗余数据。
软链接在开发中的应用
当我们在开发一个项目时,经常会出现我们所编写的代码中会使用许多工具方法,但是这些工具方法又可以单出抽出作为一个个lib使用的情况,这种情况下一般会采取monorepo的代码仓库形式,以开源社区最常用的文件结构为例:
|-packages
|--pkg1
|---src
|---package.json
|--pkg2
|---src
|---package.json
|-package.json
复制代码
当项目中pkg1需要依赖pkg2时,如果调试时使用的是发布后的文件会很不方便,这时就需要将依赖链接到本地源文件。
临时软链接
- 在全局创建pkg2的链接
cd pkg2
npm link
复制代码
cd pkg2
yarn link
复制代码
- 在pkg1中引用pkg2的链接
cd pkg1
npm link pkg2
复制代码
cd pkg1
yarn link pkg2
复制代码
npm额外提供了一种不需要将pkg2
链接到全局中的命令
cd pkg1
npm link ../pkg2
复制代码
但是上面的两种方法都不会在pkg1
的package.json
中显式声明对pkg2
的依赖,每次重新安装依赖时还需要重新进行link,很不方便,所以npm
和yarn
还提供了一种能够显式声明的方式。
持久软链接
cd pkg1
npm install ../pkg2
复制代码
cd pkg1
yarn add file:../pkg2
复制代码
这两种方式都会在pkg1
的package.json
的文件中声明依赖"pkg2": "file:../pkg2"
,但是又有一些区别。
使用npm
安装的依赖在node_modules
中是以软链接的形式存在的,而yarn
则是复制了一份源文件的副本,这样在调试时,对pkg2
的修改也无法实时反馈到pkg1
中了。
如果想使用yarn
添加软链接的话,应该使用
cd pkg1
yarn add link:../pkg2
复制代码
这样获得的效果与npm install ../pkg2
是一致的,但是,yarn
在package.json
中添加的声明依赖为"pkg2": "link:../pkg2"
,npm是无法解析这个声明形式的。所以npm
和yarn
请谨慎混用。
参考文档
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END