next中环境变量问题

问题1:关于build和build-sit请求的验证问题,同样使用相同的.env.production文件,但是请求结果不同,build必须使用验证,而build-sit不需要。

区别在于build-sit中设置了NODE_ENV=development,然后在next.config.js中进行环境判断,然后进行接口转发,因此prod环境和sit环境请求的接口不同。

#package.json
"build": "next build",
"build-sit": "cross-env NODE_ENV=development && next build",
//next.config.js
const isProd = process.env.NODE_ENV === "production";]
async rewrites() {
  if (!isProd) {
  //返回sit请求api
    return []
    }else{
  //返回prod请求api
    return []
    }
 }

问题2:build和build-sit使用的.env文件问题

具体参考https://nextjs.org/docs/messages/non-standard-node-env
因为next build都是默认为production环境,只有next dev使用的是development环境。因此build和build-sit使用的都是.env.production文件。对于gd和xg环境的区别在于github工作流中进行.env.production文件的覆盖。prod和sit环境的区别在于next.config.js中使用isProd进行区分然后进行请求的重定向

jobs:
  prod_gz_docker_deployment:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - uses: actions/checkout@v3
      
      - name: copy env to .env.production
        run: |
          cat .envProd-GZ > .env.production
          cat .env.production

因此在开发过程中使用新的变量来区分不同的环境,而尽量减少使用NODE_ENV,比如设置DEVE_ENV = "sit"来识别sit环境。


版权声明:本文为weixin_42498253原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。