假设系统代理为 http://127.0.0.1:8082 ,需要从 http://registry.xx.com 这个仓库下载 xx 包。
则npm使用代理安装包的命令如下:
npm --proxy http://127.0.0.1:8082 --registry=http://registry.xx.com install xx
npm会在把请求头里的host设成 registry.xx.com:80
,这时候远程服务器可能会解析失败返回503 service unavailable之类的错误,那么可以新增一个代理,把请求头部的host字段去掉端口号:
npmfix.js
// node npmfix 8000,127.0.0.1:8082
const [,, portstr='8000,127.0.0.1:8082']=process.argv
const [listen, proxyaddr, proxyport]=portstr.split(/,|:/)
const net=require('net')
console.log({listen, proxyaddr, proxyport})
net.createServer(c=>{
const dst=net.createConnection(proxyport, proxyaddr)
c.on('data', buf=>{
const [str, rep, fix]=[buf.toString('utf8'), /registry.xx.com:80/, 'registry.xx.com']
dst.write(str.match(rep)? str.replace(rep, fix): buf)
})
dst.pipe(c)
}).listen(listen)
此时运行 node npmfix
命令,再运行npm安装就可以了:
npm --proxy http://127.0.0.1:8000 --registry=http://registry.xx.com install xx
相关文档
随便看看
畅言模块加载中