You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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调用只在服务端执行(比如getInitialPropsgetServerSideProps里),变量名可以不用加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

火山引擎 最新活动