npm改淘宝镜和cnpm的区别
我一直以为npm改成淘宝镜后和cnpm本质上是一样的。今天学习package-lock.json的时候,发现两者还是有很大区别的。特殊记录:
先贴个截图对比一下:
1.使用cnpm安装lodash
2.使用npm改淘宝仓安装lodash
通过截图,你会发现:
cnpm安装模块的时候会在node_modules文件夹生成二个文件夹,一个以下划线
_
开头以及版本号组成的名字,一个正常名字的模块,文件夹名字虽然不一样,但里面文件是一样的。比如执行cnpm install lodash,会在node_modules文件夹下生成两个文件夹:_lodash@4.17.11@lodash和lodash,先执行了cnpm install lodash,然后再执行npm install lodash,npm安装的lodash会替换掉cnpm安装的lodash包(包括以下划线开头那个包),文件夹会只剩一个npm先安装的lodash包。再次npm uninstall lodash或者cnpm uninstall lodash,都会删除lodash包,此时插件包就变成空文件夹了。先执行了cnpm install lodash,然后再执行npm uninstall lodash后,此时会报错
npm错误!代码EINVALIDPACKAGENAME npm错误!无效的包名“_ lodash @ 4 . 17 . 11 @ lodash ”:名称不能以下划线开头;名称只能包含URL友好字符
但是,使用cnpm卸载lodash后,不会报告任何错误。此时,cnpm安装的两个包中没有下划线的一个(正常名称)将被删除。剩下的包装可以正常点击鼠标打开。那么require将在文件中报告一个错误,表明没有这样的包。
先执行了cnpm install lodash,然后手动删除cnpm安装的两个包中其中一个即下划线(非正常名字)的包,剩余的那个包,发现无法通过鼠标点击打开了。然后在文件中require会报错,提示没有这个包。
所以,cnpm安装的的2个模块,两者应该存在引用关系,正常名字模块是非正常名字模块的索引,两者都必须存在才可以使用。但是npm安装下来就不存在这种情况了,因为只有一个正常名字模块。实测发现,尽管使用npm改成淘宝仓库,发现安装速度还是远远比cnpm慢(当模块比较多的时候)。可能应该和cnpm安装的文件结构有关系吧。
本文来自柠檬琉璃夏投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/542368.html