| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- // 让 Vercel CLI(经典 https/node-fetch,不读 HTTP(S)_PROXY 环境变量)走本地代理。
- // 用法:PROXY_URL=http://127.0.0.1:10087 NODE_OPTIONS="-r ./proxy-bootstrap.cjs" vercel ...
- const http = require('http')
- const https = require('https')
- const { HttpProxyAgent } = require('http-proxy-agent')
- const { HttpsProxyAgent } = require('https-proxy-agent')
- const proxyUrl = process.env.PROXY_URL || process.env.HTTPS_PROXY || process.env.https_proxy
- if (!proxyUrl) {
- console.warn('[proxy-bootstrap] 未设置 PROXY_URL,跳过代理注入')
- module.exports = {}
- } else {
- const httpAgent = new HttpProxyAgent(proxyUrl)
- const httpsAgent = new HttpsProxyAgent(proxyUrl)
- http.globalAgent = httpAgent
- https.globalAgent = httpsAgent
- const makePatch = (orig, agent) => function (arg1, arg2, arg3) {
- let url, options, cb
- if (typeof arg1 === 'string' || arg1 instanceof URL) {
- url = arg1
- if (typeof arg2 === 'function') { options = {}; cb = arg2 } else { options = arg2 || {}; cb = arg3 }
- } else {
- options = arg1 || {}; cb = arg2
- }
- if (!options.agent) options.agent = agent
- return url !== undefined ? orig.call(this, url, options, cb) : orig.call(this, options, cb)
- }
- const origHttpRequest = http.request
- const origHttpsRequest = https.request
- const origHttpGet = http.get
- const origHttpsGet = https.get
- http.request = makePatch(origHttpRequest, httpAgent)
- https.request = makePatch(origHttpsRequest, httpsAgent)
- http.get = makePatch(origHttpGet, httpAgent)
- https.get = makePatch(origHttpsGet, httpsAgent)
- console.warn('[proxy-bootstrap] 已注入代理:' + proxyUrl)
- }
|