不管是不是私有化部署,都不建议在前端代码里把目的地址写死,毕竟还有 CDN 等情况。 如果是小型项目,就算是前后端分离开发,也可以打包成一体发布,这样目标地址就可以直接从 `/pathname/...` 开始,因为前端访问的就是后端服务器地址(含端口),所以随便怎么部署都不会有问题,相关内容可以参考阅读:[前后端分离:分离开发,一体发布](https://segmentfault.com/a/1190000022601267) 如果一定要分开发布,前端需要从后端去获取地址(毕竟要让用户自己设置环境不太现实),那么这里就有好几种获取方式,题主用到了最常用的一种方式,加载 `config.js`。 这种方式本身没有问题,发布之后更改一下 config.js 就好。在开发的时候提示找不到变量,多数是 ESLint 等工具没找到相关变量的定义,或者没有通过 import 引用。如果是 `const` 定义的,最好是 export 出来再使用的地方 import,但这样会造成耦合,所以一般不会直接定义 `const`,而是挂在 `window` 上去。 挂在 `window` 上相当于是全局变量,所以这里解决 ESLint 的问题有两种办法:一种是在 ESLint 中配置 global(参阅:[Configure Language Options -ESLint](https://link.segmentfault.com/?enc=uZv6O9LxZMaFeUqyJMkJdA%3D%3D.DQckuk8A3QUHAuqTPOW9KR7gumlCXOPaNN0HMCMSChjqRLswcTCCEGGiSPB7qBjY5AOb3RSb3YEBat0%2FVMg9kFJbPv417XFMFm7JSTz6nv2%2BQnpVX5uaKXrv8JLxPy%2FH)),下面是文档中的配置示例: { "globals": { "var1": "writable", "var2": "readonly" } } 另外一种办法,是在使用了 TypeScript 的情况下,定义一个全局类型,扩展 `Window` 接口 