本来昨天这篇文章是已经写好了,但是又研究了一番,对于pm link
的概念还不是很理解,于是就看了相关的信息,存在草稿箱了。
现在回头再看的话,只能说了解了点片面概念和基本用法,跟我实际想象上的用法差距还是有点大的。
pm link
,这个命令主要的功能,我觉的是用来调试一些不是全局的包/在另外一个目录/待开发的包。
举个列子,比如在A项目中有个module-A
的包(不是全局包)。
这时候,在B项目中要引入这个module-A
的包,有两个方法:
1、把module-A
的包复制到B项目中(很麻烦的是不是,如果有多个包的话,那不是一直复制傻了)。
2、把module-A
的包变成全局的包,然后直接在项目B中引入,是不是很舒服,而且这种方法就跟你正常引入包没啥区别,就是跟模拟真实的环境一样的。
那么我们就详细的说下,怎么把项目A中的module-A
的包变成全局,这里就可以用上我们的pm link
,具体用法如下:
1、首先要进入项目A的跟目录中
2、执行:pm link module-A
的命令,注意了,实际情况中的module-A
换成自己想要调试的包名字
3、执行完2的代码后,一般终端都会输出一条信息,大概成这样【当前module-A的真实路径 -> npm全局包的路径/module-A】
做完这三步后(其实就两步,第三步可以说是个废话吧),就可以顺利在项目B中愉快的引入module-A
的包,注意了,在项目B中修改module-A
的包,是会实时同步到项目A的module-A
的包(也就是module-A
包的真实路径),因为pm link
采用的是软链接的方式,所以这也可以说是个好处吧,也可以说是个坏处吧(因为有时候会出现只想改一处,却与之有关联的,全部都进行了同步修改了,然后后面给忘记了,就gg了)。
当然了,在项目B中调试完成后,如果要取消链接,那就要使用这条命令了,pm unlink module-A
,对了,是在项目B执行这条命令中取消哦,记住一点,谁引入谁取消哦,那么在项目B中的ode_modules
文件夹中就看不到该包了。
同理,取消项目A中的module-A
不是全局的包的话,用的也是pm unlink module-A
这条命令,但是实际效果却是,当前项目A中的module-A
包已经是个软链接了,而实际包的位置已经到了npm的全局包放置的路径中了,如果不知道当前npm的全局包命令的话,可以看这篇文章《使用npm/yarn怎么查看本地电脑已安装的全局包?》,这步其实我自己在测试的时候,也很好奇,为啥这条命令在项目A中取消module-A
包,好像跟没有作用是的,实际情况我又测试了一篇,你要到全局包中执行这条命令,接着在全局包中module-A
包的就会被删除,然后再回到项目A执行,该命令,那么此时项目A中的module-A
包软链接,会重新变成真实的文件了。
以上就是使用pm link
引入单独的一个包的方法,那么接下要讲的是,使用pm link
引入npm项目或者说引入一个npm项目文件夹吧。
还是以举例子的方式来说明吧。
比如你有个项目C,想把项目C中的所有包都变成全局包的(记得在项目的主入口中导出所有包哦),那么直接执行pm link
,就会创建一个包名称是你package.jso
文件里面的ame
字段的包名,所以这里前提你的项目是个npm的项目,如果不是的话,可以执行pm init -y
来生成一个npm项目。
如果要取消的话,直接使用pm unlink
就可以了。
这篇文章真的难写,我都不知道我说的对不对(也花了将近3个小时,一个卸载/重装/测试过去,呜呜呜),所以如有错误,欢迎指正,谢谢。