因为node安装插件是从国外服务器下载,受网络影响大,速度慢且可能出现异常。因此若是npm的服务器在中国就行了,因此咱们乐于分享的淘宝团队(阿里巴巴旗下业务阿里云)干了这事。来自官网:“这是一个完整 npmjs.org 镜像,你能够用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽可能与官方服务同步。java
也就是说咱们可使用阿里布置在国内的服务器来进行node安装。node
1.使用阿里定制的 cnpm 命令行工具代替默认的 npm,输入下面代码进行安装:git
$ npm install -g cnpm --registry=https://registry.npm.taobao.org
2.检测cnpm版本,若是安装成功能够看到cnpm的基本信息。express
cnpm -v
3.之后安装插件只须要使用cnpm intall
便可npm
假如我已经习惯了
npm install
的安装方式,我不想去下载阿里的cnpm命令工具将命令变成cnpm怎么办?很容易咱们想到,我直接将node的仓库地址改为淘宝镜像的仓库地址不就行了吗?json
npm install --registry=https://registry.npm.taobao.org
设置成全局的下载镜像站点,这样每次install的时候就不用加--registry,默认会从淘宝镜像下载,设置方法以下:服务器
1.打开.npmrc文件(nodejs\node_modules\npm\npmrc,没有的话可使用git命令行建一个( touch .npmrc),用cmd命令建会报错) 2.增长 registry =https://registry.npm.taobao.org 便可。
也能够按以下方式直接在命令行设置网络
npm config set registry https://registry.npm.taobao.org
检测是否成功工具
// 配置后可经过下面方式来验证是否成功 npm config get registry // 或 npm info express
这样,咱们可使用淘宝镜像还不用更换成cnpm,是否是很爽!虽然实际都是使用的是淘宝镜像。
最后附上淘宝镜像官网地址:http://npm.taobao.org/ui
注:若是想还原npm仓库地址,只需再把地址配置成npm镜像就能够了
npm config set registry https://registry.npmjs.org/
以前一直觉得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 ERR! code EINVALIDPACKAGENAME
npm ERR! Invalid package name "_lodash@4.17.11@lodash": name cannot start with an underscore; name can only contain URL-friendly characters
可是使用cnpm uninstall lodash后,不会报错,此时会删掉cnpm安装的两个包中其中一个即非下划线(正常名字)的包。剩余的那个包是能够正常经过鼠标点击打开的。而后在文件中require会报错,提示没有这个包。
因此,cnpm安装的的2个模块,二者应该存在引用关系,正常名字模块是非正常名字模块的索引,二者都必须存在才可使用。可是npm安装下来就不存在这种状况了,由于只有一个正常名字模块。
实测发现,尽管使用npm改为淘宝仓库,发现安装速度仍是远远比cnpm慢(当模块比较多的时候)。可能应该和cnpm安装的文件结构有关系吧。