Next.js中如何基于NODE_ENV设置环境对应的条件URL?
根据环境自动切换API URL的解决方案
当然可以实现!从你的代码里能看出来用的是Next.js,这里给你两种靠谱的实现方式,推荐第一种更灵活的方案:
方案一:使用环境变量(推荐)
这是最符合现代前端工程化的做法,把配置和代码分离,后期改地址不用动代码,还能避免硬编码的风险。
步骤1:配置环境变量
在项目根目录新建
.env.local文件(开发环境用),写入:NEXT_PUBLIC_API_BASE_URL=http://localhost:3000生产环境的话,如果你用Vercel这类平台部署,直接在项目的环境变量设置里添加
NEXT_PUBLIC_API_BASE_URL,值填https://productionurl.now.sh就行;也可以在本地新建.env.production文件来测试生产环境的配置。小贴士:如果你的API调用只在服务端执行(比如
getInitialProps、getServerSideProps里),变量名可以不用加NEXT_PUBLIC_前缀,这样变量不会暴露给客户端,更安全。
步骤2:修改组件代码
直接用环境变量替换硬编码的URL,代码会简洁很多:
export default class Search extends Component { static async getInitialProps({ query: { location } }) { const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL; const res = await fetch(`${baseUrl}/api/search?location=${location}`); const businesses = await res.json(); return businesses; } // ...你的其他组件代码 }
方案二:直接判断环境变量(不推荐,但满足你的需求)
如果你一定要写显式的条件判断,可以用Node.js自带的process.env.NODE_ENV变量,它在开发模式下是development,生产模式下是production:
export default class Search extends Component { static async getInitialProps({ query: { location } }) { let baseUrl; if (process.env.NODE_ENV === 'development') { baseUrl = 'http://localhost:3000'; } else { baseUrl = 'https://productionurl.now.sh'; } const res = await fetch(`${baseUrl}/api/search?location=${location}`); const businesses = await res.json(); return businesses; } // ...你的其他组件代码 }
为什么不推荐这种?因为后期要换生产地址或者新增测试环境,你得改代码重新部署,而用环境变量的话直接改配置就行,更灵活。
内容的提问来源于stack exchange,提问作者avatarhzh




