|
|
@@ -0,0 +1,40 @@
|
|
|
+// 让 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)
|
|
|
+}
|