npm穿牆


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 翻牆,他的默認端口是 8087 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 的位置,然后解壓放進去就行了。

 

本文同步自我的微分享

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM