项目背景

为了适应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 就可以得到想要的结果了

CROSS-ENV不同环境配置的更多相关文章

  1. Lavarel之环境配置 .env

    .env 文件位于项目根目录下,作为全局环境配置文件. 1. 配置参数 // 运行环境名称 APP_ENV=local // 调试模式,开发阶段启用,上线状态禁用. APP_DEBUG=true // ...

  2. Electron的环境配置

    原文地址http://huisky.com/blog/161218121551123 本文介绍了Electron的环境配置,包括Electron下载.nodejs下载安装.NPM+Bower安装配置. ...

  3. 前端自动化测试 —— TDD环境配置(React+TypeScript)

    欢迎讨论与指导:) 前言 TDD -- Test-Drive Development是测试驱动开发的意思,是敏捷开发中的一项核心实践和技术,也是一种测试方法论.TDD的原理是在开发功能代码之前,先编写 ...

  4. Mac下golang开发环境配置

    go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...

  5. Mac系统搭建Go语言Sublime Text 2环境配置

    Go语言是谷歌自家的编译型语言,旨在不损失性能的前提下降低代码复杂率.其优势是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦. 一.安装Golang的SDK 在官网http: ...

  6. 解决laravel中环境配置不起作用的方法

    博客已经迁移到www.imyzf.com,本站不再更新,请谅解! laravel有个环境配置选项很好用,在bootstrap/start.php中,曾经百度到这里面加入域名,就可以自动选择环境 $en ...

  7. Spring环境配置

    研究spring3的时候发现一个非常好用的特性:环境配置(spring2是否有此特性未知) 官方演示样例代码例如以下: <!-- app-config.xml --> <beans ...

  8. 手把手教你webpack、react和node.js环境配置(上篇)

    很多人刚学习react的时候,往往因为繁琐的配置而头疼,这里我将手把手教大家怎么用webpack配置react和redux的环境,这篇教程包括前端react和后台node整个网站的环境配置,对node ...

  9. webpack开发与生产环境配置

    前言 作者去年就开始使用webpack, 最早的接触就来自于vue-cli.那个时候工作重点主要也是 vue 的使用,对webpack的配置是知之甚少,期间有问题也是询问大牛 @吕大豹.顺便说一句,对 ...

  10. webpack开发环境配置和生产环境配置

    开发环境配置 在开发环境下,我们首先考虑的是方便开发,方便代码调试,不需要考虑代码合并和css样式分离这些. 这里主要说三个 :1.css模块化:2.模块热替换功能:3.source-map(代码映射 ...

随机推荐

  1. vue当文字很多的时候实现...代替

    vue当文字很多的时候实现...代替只需加三行代码 overflow: hiddenwhite-space: nowraptext-overflow: ellipsis

  2. Linux -- 进程管理之僵尸进程

    UNIX 存在一种机制:在每个进程退出的同时,操作系统释放该进程所有资源,但仍然保留一定的信息(PID / Status / runtime),直到父进程执行 wait() / waitpid(),以 ...

  3. python的Requests库的使用

    Requests模块: Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量 ...

  4. PowerMock学习(十)之Mock spy的使用

    前言 回顾下之前学过的内容,会发现一点,如果在mock后不写when和thenReturn去指定,即便是mock调用任何方法,什么也不会做,也看不到什么效果. 划重点的时候来了,本身mock出来的对象 ...

  5. Scala: Case classes

    Case classes are like regular classes with a few key differences which we will go over. Case classes ...

  6. Python-车牌识别

    一.车牌识别系统的用途与技术车牌识别系统(Vehicle License Plate Recognition,VLPR) 是计算机视频图像识别技术在车辆牌照识别中的一种应用.车牌识别在高速公路车辆管理 ...

  7. 基于springboot的web项目最佳实践

    springboot 可以说是现在做javaweb开发最火的技术,我在基于springboot搭建项目的过程中,踩过不少坑,发现整合框架时并非仅仅引入starter 那么简单. 要做到简单,易用,扩展 ...

  8. nginx反向代理 和部分优化

    准备环境  : 两台web服务     安装http  写入文档  并启动 yum -y install httpd echo "192.168.2.100" > /var/ ...

  9. 什么是渐进式框架 (vue.js)

    渐进式意味着你可以将 vue 作为你项目的一部分嵌入其中,带来更丰富的交互体验

  10. luogu P1807 最长路_NOI导刊2010提高(07)

    题目描述 设G为有n个顶点的有向无环图,G中各顶点的编号为1到n,且当为G中的一条边时有i < j.设w(i,j)为边的长度,请设计算法,计算图G中<1,n>间的最长路径. 输入格式 ...