使用npm link来创建软链接

原创 野人  2021-11-17 09:01  阅读 113 次

本来昨天这篇文章是已经写好了,但是又研究了一番,对于npm link的概念还不是很理解,于是就看了相关的信息,存在草稿箱了。

现在回头再看的话,只能说了解了点片面概念和基本用法,跟我实际想象上的用法差距还是有点大的。

npm link,这个命令主要的功能,我觉的是用来调试一些不是全局的包/在另外一个目录/待开发的包。

举个列子,比如在A项目中有个module-A的包(不是全局包)。

这时候,在B项目中要引入这个module-A的包,有两个方法:

1、把module-A的包复制到B项目中(很麻烦的是不是,如果有多个包的话,那不是一直复制傻了)。

2、把module-A的包变成全局的包,然后直接在项目B中引入,是不是很舒服,而且这种方法就跟你正常引入包没啥区别,就是跟模拟真实的环境一样的。

那么我们就详细的说下,怎么把项目A中的module-A的包变成全局,这里就可以用上我们的npm link,具体用法如下:

1、首先要进入项目A的跟目录中

2、执行:npm link module-A的命令,注意了,实际情况中的module-A换成自己想要调试的包名字

3、执行完2的代码后,一般终端都会输出一条信息,大概成这样【当前module-A的真实路径 -> npm全局包的路径/module-A】

做完这三步后(其实就两步,第三步可以说是个废话吧),就可以顺利在项目B中愉快的引入module-A的包,注意了,在项目B中修改module-A的包,是会实时同步到项目A的module-A的包(也就是module-A包的真实路径),因为npm link采用的是软链接的方式,所以这也可以说是个好处吧,也可以说是个坏处吧(因为有时候会出现只想改一处,却与之有关联的,全部都进行了同步修改了,然后后面给忘记了,就gg了)。

当然了,在项目B中调试完成后,如果要取消链接,那就要使用这条命令了,npm unlink module-A,对了,是在项目B执行这条命令中取消哦,记住一点,谁引入谁取消哦,那么在项目B中的node_modules文件夹中就看不到该包了。

同理,取消项目A中的module-A不是全局的包的话,用的也是npm unlink module-A这条命令,但是实际效果却是,当前项目A中的module-A包已经是个软链接了,而实际包的位置已经到了npm的全局包放置的路径中了,如果不知道当前npm的全局包命令的话,可以看这篇文章《使用npm/yarn怎么查看本地电脑已安装的全局包?》,这步其实我自己在测试的时候,也很好奇,为啥这条命令在项目A中取消module-A包,好像跟没有作用是的,实际情况我又测试了一篇,你要到全局包中执行这条命令,接着在全局包中module-A包的就会被删除,然后再回到项目A执行,该命令,那么此时项目A中的module-A包软链接,会重新变成真实的文件了。

以上就是使用npm link引入单独的一个包的方法,那么接下要讲的是,使用npm link引入npm项目或者说引入一个npm项目文件夹吧。

还是以举例子的方式来说明吧。

比如你有个项目C,想把项目C中的所有包都变成全局包的(记得在项目的主入口中导出所有包哦),那么直接执行npm link,就会创建一个包名称是你package.json文件里面的name字段的包名,所以这里前提你的项目是个npm的项目,如果不是的话,可以执行npm init -y来生成一个npm项目。

如果要取消的话,直接使用npm unlink就可以了。

这篇文章真的难写,我都不知道我说的对不对(也花了将近3个小时,一个卸载/重装/测试过去,呜呜呜),所以如有错误,欢迎指正,谢谢。

本文地址:https://www.yerenwz.com/5160.html
版权声明:本文为原创文章,版权归 野人 所有,欢迎分享本文,转载请保留出处!

发表评论