GWF 很给力,很多东西都能墙掉,但是把 npm 也纳入黑名单,不知道 GWFer 是怎么想的。翻墙翻了好多年了,原理其实也挺简单的,proxy 嘛!

» 方法一

A) 国内源,http://cnpmjs.org

使用方式,你可以在 cmd 中键入 npm install -g cnpm,然后出去吃个饭,如果还没有安装好,那就换个方式:

npm install -g cnpm --registry=http://r.cnpmjs.org

registry 参数的作用就是指向需要 download 的仓库。 cnpm 跟国外的 npm 是同步的,只要 npm 有更新,cnpm 就会跟着一起更新。

当然,你也可以简单点搞:

npm config set registry="http://r.cnpmjs.org"

在配置中直接指定源头,下次就没有必要使用 --registry 参数了。配置好了之后,npm 就指向了国内的仓库。

B)  你也可以直接安装 cnpm,安装好了之后使用 cnpm 来下载文件,其实原理跟上面是一样的,于是你就可以这样了:

cnpm install -g package_name

» 方法二

代理,在配置中设置代理参数:

# 全局路径,也就是 npm install -g,这里 -g 的意义
npm config set prefix="c:\nodejs"
# 一般使用 goagent 翻墙,他的默认端口是
npm config set proxy=http://127.0.0.1:8087
# 设置 https 的代理
npm config set https_proxy=http://127.0.0.1:8087
# 这个地方记得设置下,别搞了个代理,结果在国内源下载
npm config set registry=http://registry.npmjs.org

这样配置好了之后,打开你的 goagent ,记得一定要打开,不然 npm 必然报错。上面写了一堆,其实没必要跟着写这么多,一句话就可以搞定:

npm config set proxy=http://127.0.0.1:8087

为啥呢,npm -g 没必要自己去配置, registry 默认就是 http://registry.npmjs.org,不配置 https_proxy,也走的通,所以就只剩下上面这条命令了。

P.S:有些公司也会提供一个翻墙的主机,可以把上面的代理改成 他 http://IP:Port,也可以翻墙了。翻墙的原理比较简单,就是一个 ”CONNECT“ 请求建立链接,这是一个 node 写的代理,几行代码就搞定了。

var http = require('http');
var net = require('net');
var url = require('url'); // Create an HTTP tunneling proxy
var proxy = http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('okay');
});
proxy.on('connect', function(req, cltSocket, head) {
// connect to an origin server
var srvUrl = url.parse('http://' + req.url);
var srvSocket = net.connect(srvUrl.port, srvUrl.hostname, function() {
cltSocket.write('HTTP/1.1 200 Connection Established\r\n' +
'Proxy-agent: Node-Proxy\r\n' +
'\r\n');
srvSocket.write(head);
srvSocket.pipe(cltSocket);
cltSocket.pipe(srvSocket);
});
}); // now that proxy is running
proxy.listen(1337, '127.0.0.1', function() { // make a request to a tunneling proxy
var options = {
port: 1337,
hostname: '127.0.0.1',
method: 'CONNECT',
path: 'www.google.com:80'
}; var req = http.request(options);
req.end(); req.on('connect', function(res, socket, head) {
console.log('got connected!'); // make a request over an HTTP tunnel
socket.write('GET / HTTP/1.1\r\n' +
'Host: www.google.com:80\r\n' +
'Connection: close\r\n' +
'\r\n');
socket.on('data', function(chunk) {
console.log(chunk.toString());
});
socket.on('end', function() {
proxy.close();
});
});
});

node proxy

» 方法三

直接下载到本地。

实在是怕麻烦,就直接把文件 download 下来,然后放到 node_module 之中就行了。如果是全局模块,找到全局 node_module 的位置,然后解压放进去就行了。

本文同步自我的微分享

npm穿墙的更多相关文章

  1. JS-nodejs--nodewebkit--npm穿墙cnpm

    npm install 本地安装与全局安装的区别 本地安装1. 将安装包放在 ./node_modules 下(运行npm时所在的目录)2. 可以通过 require() 来引入本地安装的包 全局安装 ...

  2. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  3. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  4. NPM (node package manager) 入门 - 基础使用

    什么是npm ? npm 是 nodejs 的包管理和分发工具.它可以让 javascript 开发者能够更加轻松的共享代码和共用代码片段,并且通过 npm 管理你分享的代码也很方便快捷和简单. 截至 ...

  5. Npm包的开发

    个人开发包的目录结构 ├── coverage //istanbul测试覆盖率生成的文件 ├── index.js //入口文件 ├── introduce.md //说明文件 ├── lib │   ...

  6. npm package.json属性详解

    概述 本文档是自己看官方文档的理解+翻译,内容是package.json配置里边的属性含义.package.json必须是一个严格的json文件,而不仅仅是js里边的一个对象.其中很多属性可以通过np ...

  7. npm 使用小结

    本文内容基于 npm 4.0.5 概述 npm (node package manager),即 node 包管理器.这里的 node 包就是指各种 javascript 库. npm 是随同 Nod ...

  8. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

  9. 升级npm

    查看npm的所有版本 运行命令: npm view npm versions 命令运行后,会输出到目前为止npm的所有版本. [ '1.1.25', '1.1.70', '1.1.71', '1.2. ...

随机推荐

  1. url中,中文乱码的问题

    1// 在jsp中 String add = java.net.URLEncoder.encode("添加", "utf-8"); add = java.net ...

  2. EM最大期望化算法

    最大期望算法(Expectation-maximization algorithm,又译期望最大化算法)在统计中被用于寻找,依赖于不可观察的隐性变量的概率模型中,参数的最大似然估计. 在统计计算中,最 ...

  3. 页面轮换,ViewFlipper 和 ViewPager 的区别

    ViewFlipper继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据. ViewPager继承V ...

  4. [转] 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能

    首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...

  5. 【转】Beanstalkd 队列简易使用

    Beanstalkd一个高性能分布式内存队列系统   之前在微博上调查过大家正在使用的分布式内存队列系统,反馈有Memcacheq,Fqueue, RabbitMQ, Beanstalkd以及link ...

  6. navicat自动备份数据

    1.打开navicat客户端,连上mysql后,双击左边你想要备份的数据库.点击"计划",再点击"新建批处理作业". 2.双击上面的可用任务,它就会到下面的列表 ...

  7. codeIgniter怎么实现对input type=text对话框blur事件的监听以及传值?

    如题,这个问题怎么解决? 用JS和前端框架习惯了,现在学后端框架,感觉各种坑...

  8. Visual Assist X 工具栏不显示 toolbar

    Visual Assist X ,工具栏,不显示, toolbar 1)首先确认安装顺序是否正确,先安装VC,再安装Visual Assist X 2)确认安装的Visual Assist是否添加到V ...

  9. 黑马程序员_Java基础:集合总结

    ------- android培训.java培训.期待与您交流! ---------- 一.集合概念 相信大家都知道,java是一门面向对象的编程语言,而对事物的体现都是以对象的形式,所以为了方便对多 ...

  10. Fix git 提交代码错误

    今天用git clone下代码,修改,push提交,发现以下错误 [root@localhost gocache]# git push origin master error: The request ...