• CROSS-ENV不同环境配置


    项目背景

    为了适应h5环境搭建需求,需要动态配置开发,测试,生产三种对应域名及其及打包命令。使用cross-env可以让配置环境更加清晰明了还好管理。

    简介

    cross-env的作用是不需要全局配置NODE_ENV在scripts脚本中修改NODE_ENV的值从而实现不同环境中proccess.env.NODE_ENV的不同,而config的工作原理就是基于NODE_ENV这个值的,所以推荐两者结合使用。

    安装 cross-env

    npm install --save-dev cross-env

    使用

    npm run dev 打包的是开发环境
    npm run build--qa 打包的是测试环境
    npm run build--prod 打包的是生成环境

    "dev":"cross-env NODE-ENV=development node build/webpack.deb.conf.js"
    "build --qa":"cross-env NODE_ENV=testing node build/build.js"
    "build --prod":"cross-env NODE_ENV=production node build/build.js"
    

      

    修改config里面的参数,如下是环境的配置信息,注意NODE_ENV里的配置名称与打包命令的相一致:

    //dev环境
    module.exports = {
      NODE_ENV: '"development"',
      BASE_API: 'http://10.250.115.99/statistics' //代理路径
    }
    //测试环境
    module.exports = {
      NODE_ENV: '"testing"',
      BASE_API: 'http://10.250.115.99/statistics' //代理路径
    }
     //生产环境
     module.exports = {
       NODE_ENV: '"production"',
       BASE_API: 'http://ai.iteldrive.com/statistics' //代理路径
     }
    

      

    修改config/index.js (注意新增prodEnv、testEnv)

    'use strict'
    const path = require('path')
    
    module.exports = {
      build: {
        prodEnv: require('./prod.env'),
        testEnv: require('./test.env'),
        index: path.resolve(__dirname, '../dist/index.html'),
        assetsRoot: path.resolve(__dirname, '../dist'),
        assetsSubDirectory: 'static',
        assetsPublicPath: './', 
        productionSourceMap: true,
        devtool: '#source-map',
        productionGzip: false,
        productionGzipExtensions: ['js', 'css'],
        bundleAnalyzerReport: process.env.npm_config_report
      }
    }
    

      

    在webpackage.prod.conf.js中配置构建环境参数

    const env = process.env.NODE_ENV === 'testing'
      ? require('../config/test.env')
      : require('../config/prod.env')

    调整build/build.js

    var spinner = ora('building for ' + process.env.NODE_ENV + '...')
    spinner.start()

    以上步骤配置完毕之后,重启npm run build--qa,此时就会发现运行测试环境的代码已经打包生成好了(dist目录),问题是环境配好了,怎么配置不用环境的api呢?

    配置不同环境api,根据匹配NODE_ENV的不同的值

    let API_URL
    if (process.env.NODE_ENV === 'development') {
      API_URL = 'http://10.250.115.99/statistics'
    } else if (process.env.NODE_ENV === 'production') { // 测试环境
      API_URL = 'http://ai.iteldrive.com/statistics'
    } else if (process.env.NODE_ENV === 'testing') {
      API_URL = 'http://10.250.115.99/statistics'
    } else {
      API_URL = 'http://ai.iteldrive.com/statistics'
    }
    //console.log(API_URL + '请求api************')
    const http = axios.create({
      baseURL: API_URL, // api的base_url,
      timeout: 1000 * 30,
      withCredentials: true,
      headers: {
        'Content-Type': 'application/json; charset=utf-8'
      }
    
    })
    

      

    现在分别执行 npm run dev、npm run build --qa 和 npm run build --prod 就可以得到想要的结果了

  • 相关阅读:
    阿里面试后的问题总结
    Spring IOC源码实现流程
    Spring Aop源码分析
    SpringCloud的分布式配置及消息总线
    阿里java编码规范考试总结
    压缩文件的压缩时候中文乱码码
    mybatis的时间比较 xml 及不解析<=的写法
    批量插入一张表的数据,并且生成不同的uuid 字符截取 批量更新 去除重复数据
    Redis集群的搭建
    Python 之 基础知识(二)
  • 原文地址:https://www.cnblogs.com/wpshan/p/11119597.html
Copyright © 2020-2023  润新知