我需要在运行时设置package.json
中的proxy
值,例如使用环境变量。如何做到这一点?
// package.json
{
"name": "demo",
"proxy": process.env.MY_PROXY_VAL , // <- how?
"dependencies": {},
"scripts": {},
}
谢谢。
HTTPS_PROXY
或HTTP_PROXY
读取,所以你不需要这样做。/src
文件夹下创建一个名为setupProxy.js
的本地文件,这将覆盖package.json
中设置的代理。
当然,然后您必须确保所有路径都设置正确,但它可以很好地工作,并且您可以对应用程序中哪些页面进行代理和哪些不进行代理进行精细控制。setupProxy
方法和createProxyMiddleware
库来实现:// Sample of how to setup a proxy middleware with environment variables
//// file: <project_root>/src/setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/rest',
createProxyMiddleware({
target: process.env.REACT_APP_PROXY_HOST,
changeOrigin: true,
})
);
};
//// file: <project_root>/.env
REACT_APP_PROXY_HOST=https://localhost:6700
/rest
端点的请求,因此我创建了一个新的端点。所有其他请求仍将转到默认的localhost:3000
URL,提供React应用程序。REACT_APP_PROXY_HOST
定义的。我在本地.env
文件中定义了变量,但如果需要,您也可以直接在package.json
中的脚本中设置它。https
上的服务器时,遇到了其他问题。以前的开发设置使用在package.json
中设置的静态代理很好。但是,当使用createProxyMiddleware
并针对具有证书的https运行的服务器时,必须提供所使用证书的路径。// Sample of how to setup a proxy middleware with environment variables
// targeting a server running on https
//// file: <project_root>/src/setupProxy.js
const { createProxyMiddleware } = require('http-proxy-middleware');
const fs = require('fs');
const protocol = JSON.parse(process.env.HTTPS) ? "https:" : "http:";
const host = process.env.REACT_APP_PROXY_HOST
const port = process.env.REACT_APP_PROXY_PORT
module.exports = function(app) {
app.use(
'/rest',
createProxyMiddleware({
target: {
protocol: protocol,
host: host,
port: port,
pfx: fs.readFileSync('src/root-cert.pem')
},
changeOrigin: true,
})
);
};
//// file: <project_root>/.env
HTTPS=true
REACT_APP_PROXY_HOST=localhost
REACT_APP_PROXY_PORT=6700
协议
、主机
、端口
和一个属性pfx
的对象给出,其中包含通过https验证服务器的证书。
在这种情况下,它是项目源目录中的硬编码路径,但也可以使用环境变量进行设置。HTTPS=true
会覆盖默认的开发设置,并默认情况下启动开发服务器在https://localhost:3000
。
通过提供正确的证书和此设置,运行在https上的服务器可以无问题地访问。http-proxy-middleware
和底层的node-http-proxy
文档中都有官方链接。
这个问题在其他地方也受到了关注,例如:
希望能帮助那些寻找同样问题的人,如果有任何更新或变化,请在评论中添加建议。