作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.China Node Package Manager(简称"CNPM")概述
1>.CNPM实现原理
CNPM全称为"China Node Package Manager",即中国的包管理镜器。其原理是用一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为10分钟一次以保证尽量与官方服务同步。
在生产环境中,当我们下载的包比较大时,CNPM的作用还是相当可观的,毕竟你在国外下载一个比较大的包耗时较长,由于网络环境等因素可能要用到40分钟左右还未必能下载完毕,而用国内的软件源可能仅需几秒就可以搞定包下载的问题。
温馨提示:
当我们使用cnpm命令下载软件包时,默认会走国内的软件源去下载包,而使用npm命令下载软件包时,依旧还是回去官网下载哟~当然,你也可以将npm别名为cnpm哟,但我不推荐这样做,因为一旦国内的软件源服务器宕机后,你依旧无法访问官方的软件源(因为您将npm的别名指向了cnpm)
2>.CNPM的参考文档
国内的NPM软件源有很多,其中阿里云的软件源就是一个不错的选择,本片笔记就是使用阿里的软件源。
参考连接:
https://developer.aliyun.com/mirror/NPM
二.基于cnpm工具安装软件源
1>.安装cnpm软件包
C:\Users\yinzhengjie>npm install -g cnpm --registry=https://registry.npm.taobao.org
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
C:\Users\yinzhengjie\AppData\Roaming\npm\cnpm -> C:\Users\yinzhengjie\AppData\Roaming\npm\node_modules\cnpm\bin\cnpm
+ cnpm@6.1.1
added 689 packages from 974 contributors in 21.483s
C:\Users\yinzhengjie>
C:\Users\yinzhengjie>npm install -g cnpm --registry=https://registry.npm.taobao.org
2>.基于cnpm工具安装所需的软件包
C:\Users\yinzhengjie\demo>type package.json
{
"name": "demo",
"version": "1.0.0",
"description": "My local warehouse",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"math": "0.0.3"
}
}
C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>cnpm i express --save
√ Installed 1 packages
√ Linked 48 latest versions
√ Run 0 scripts
√ All packages installed (52 packages installed from npm registry, used 2s(network 2s), speed 333.54kB/s, json 49(122.96kB), tarball 547.46kB)
C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>type package.json
{
"name": "demo",
"version": "1.0.0",
"description": "My local warehouse",
"main": "index.js",
"scripts": {
"test": "echo "Error: no test specified" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"math": "0.0.3"
}
}
C:\Users\yinzhengjie\demo>
C:\Users\yinzhengjie\demo>cnpm i express --save
三.NodeJS搜索包的流程
NodeJS在使用模块名字来引入模块时,它会在当前目录的"node_modules"目录中寻找是否含有该模块,如果有则直接使用,如果没有则继续向上一级目录的"node_modules"中寻找,如果有就直接使用,如果没有就重复之前的步骤继续向上级目录找,直到找到根目录为止。
如果NodeJS到根目录的"node_modules"目录下依旧没有找到对应的模块文件,或者根目录压根就没有"node_modules"目录,则程序会报错~