以cnpm为例,从指定仓库地址安装包:
npm install -g cnpm --registry=https://registry.npm.taobao.org
代理设置目前 没有 试验成功,直接在npm install后面加 --http-proxy 或者修改 .npmrc <font color=red>均不能</font>让npm从代理访问资源。
今天测试了npm的请求,发现全部都是GET方式,因此可以本地搭建一个registry中转服务器,通过中转服务器连接代理访问目标仓库。
添加hosts
```js
0.0.1 registry.xx.com
先安装request
npm install request
以下代码保存为svr.js
const request=require('request') const r = request.defaults({'proxy':'http://127.0.0.1:8080'}) process.on('uncaughtException', e=>{ console.log(e) }) let npm=(registry, local_port)=>{ const opt=require('url').parse(registry) require('http').createServer((req, res)=>{ r({ method: req.method, uri: (req.url.indexOf(registry)===0?'':registry)+req.url, // 有时候请求的url会带上前缀 headers: { Host: opt.host, Connection: 'close', } }).pipe(res) }).listen(local_port) } npm('http://registry.xx.com', 80)
运行svr.js
安装包时修改registry路径为本地端口即可,此时包是通过代理从 https://registry.npmjs.org/ 安装的
npm install react --registry=http://registry.xx.com
注意:
request使用代理时补上的http头是小写的host,如果是自己写的代理服务器务必处理这个特殊情况,忽略大小写。
这个中转脚本只监听了http的协议,https的后面遇到再补充。
部分电脑上不允许直接监听本地80端口,例如mac上需要sudo输入密码才可以启动svr.js。
代理服务器需要<font color=red>禁止从本地访问npm仓库</font>,否则这个中转服务器就失去意义了。
相关文档
暂无
随便看看
畅言模块加载中