webpack正式、测试环境接口地址本地运行及打包命令配置
声明:本文由w3h5原创,转载请注明出处:《webpack正式、测试环境接口地址本地运行及打包命令配置》 https://www.w3h5.com/post/521.html
为了方便开发,节省接口地址修改维护时间,可以通过 webpack 配置,区分正式、测试环境。

可以方便的通过一个命令或者参数,运行或者连接不同环境的接口地址:
# 本地运行测试环境
npm run dev # 本地运行正式环境
npm run prod # 测试环境打包
npm run build # 正式环境打包
npm run build prod
先了解几个概念:
process.argv :
process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()。
process.argv 属性返回一个数组,这个数组包含了启动 Node.js 进程时的命令行参数。
其中:
数组的第一个元素 process.argv[0] 返回启动 Node.js 进程的可执行文件所在的绝对路径。
第二个元素 process.argv[1] 为当前执行的 JavaScript 文件路径。
剩余的元素为其他命令行参数。
例如运行:
node process-args.js one two=three four
此时:
process.argv = ['/usr/local/bin/node', '<path>process-args.js', 'one', 'two=three', 'four']
webpack 也同样支持 argv 参数,在 package.json 中配置命令:
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"prod": "webpack-dev-server --inline --progress --env=prod --config build/webpack.dev.conf.js",
},
我们就可以从 process.argv[4] 拿到 "--env=prod" 这个参数。
打印出来的效果如下:
# process.argv [ '/usr/local/bin/node',
'/www/w3h5/node_modules/.bin/webpack',
'--inline',
'--progress',
'--env=prod',
'--config' ]
配置方法:
首先修改 webpack 的配置文件, /config/dev.env.js
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env') let params = process.argv[4]
let baseUrl = '' switch (params) {
case '--env=prod': //正式环境地址
baseUrl = '"https://api.w3h5.com/"',//首页地址
break
default: //测试环境地址
baseUrl = '"http://api-test.w3h5.com/"',//首页地址
} module.exports = merge(prodEnv, {//process.env.HOME_URL
NODE_ENV: '"development"',
HOME_URL: baseUrl,//首页地址
})
先声明一个变量 params ,然后将 --env=prod (代表正式环境)赋值给它。
使用 switch case 语句进行判断,如果有这个代表正式环境的参数,则使用正式环境的地址。如果没有这个参数,则默认走测试环境。
然后将 HOME_URL 变量用 module.exports 导出。
这样就可以通过 npm 命令来区分运行正式还是测试环境了。
# 测试环境
npm run dev # 正式环境
npm run prod
打包命令配置:
和上面一样,修改 /config/prod.evn.js 文件:
'use strict' let params = process.argv[2]
let baseUrl = '' switch (params) {
case 'prod': //正式环境地址
baseUrl = '"https://api.w3h5.com/"',//首页地址
break
default: //测试环境地址
baseUrl = '"http://api-test.w3h5.com/"',//首页地址
} module.exports = merge(prodEnv, {//process.env.HOME_URL
NODE_ENV: '"production"',
HOME_URL: baseUrl,//首页地址
})
细心的朋友可能会注意到,这里给 params 赋得值是 process.argv[2] ,可以看一下 package.json 中配置的命令:
"scripts": {
"build": "node build/build.js"
},
因为 build 命令只有两个参数,执行下面的命令,就可以将第三个参数 prod 带过去:
# 测试环境打包
npm run build # 正式环境打包
npm run build prod
前端直接调用
项目运行后,前端就可以直接用 process.env.HOME_URL 获取到首页的地址了。
测试环境会显示:http://api-test.w3h5.com/
正式环境就是:https://api.w3h5.com/
什么是 process.env :
通常情况下,我们需要针对不同环境(开发环境、集成环境、生产环境等),进行相应策略的打包(比如是否替换接口地址,代码是否压缩等)。webpack 就是通过 process.env 属性加以区分。
webpack 是 npm 生态中的一个模块,webpack 运行依赖于 node 环境。这里的 process.env 是Nodejs提供的一个API,它返回一个包含用户环境信息的对象。
如果我们给 Nodejs 设置一个环境变量,并把它挂载在 process.env 返回的对象上,便可以在代码中进行相应的环境判断。
process.env 属性返回一个对象,包含了当前 Shell 的所有环境变量。比如,process.env.HOME 返回用户的主目录。
通常的做法是,新建一个环境变量 NODE_ENV ,用它确定当前所处的开发阶段,生产阶段设为 production ,开发阶段设为 development 或 testing ,然后在脚本中读取 process.env.NODE_ENV 即可。
要说明的是,NODE_ENV 这个名称只是开发社区的一种共识,名称内容是可以修改的。如果需要,你也可以把它定义为 NODE_abc 或者 xxx 都行。
参考文献:
http://nodejs.cn/api/process.html#process_process_argv
https://www.jianshu.com/p/19d199f93045
webpack正式、测试环境接口地址本地运行及打包命令配置的更多相关文章
- 本地运行aws lambda credential 配置 (missing credential config error)
参照这篇文章 http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-sha ...
- idea构建spark开发环境,并本地运行wordcount
1.首先现在idea,官网:https://www.jetbrains.com/idea/ 2.安装jdk1.8,scala2.11 3.下载idea后,需要在idea中安装scala的插件,安装的方 ...
- 基于SecureCRT的测试环境的克隆的linux/vi相关命令
#chmod -R 777*; 参数-R:对当前目录下的所有档案与子目录进行相同的权限 变更(即以递归的方式逐个变更). *:通配符,指的是当前目录下的所有文件及目录. 所有文件及其子目录的文件拥有者 ...
- Maven对不同的测试环境用不同的参数进行打包
通过mvn package -P ${env} 加载不同配置文件 1.pom.xml中的配置 filter-dev.properties jdbc.properties
- 懒人npm运行和打包命令
源码: @echo off&setlocal EnableDelayedExpansion & color 3e :start title npm 常用命令 by:ceet@vip.q ...
- vue2+axios在不同的环境打包不同的接口地址
node.js的环境变量 process process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程.作为一个对象,它对于 Node.js 应用程序始终是可用 ...
- MapReduce两种执行环境介绍:本地测试环境,服务器环境
本地测试环境(windows):1.在windows下配置hadoop的环境变量2.拷贝debug工具(winutils.exe)到hadoop目录中的bin目录,注意winutils.exe的版本要 ...
- NodeJs 开发微信公众号(二)测试环境部署
由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ...
- 阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!
作者| 阿里云技术专家 郑云龙(砧木) 目前越来越多的开发者开始采纳 Kubernetes 管理基础设施环境,并通过 Kubernetes 完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发 ...
随机推荐
- Vue入门 — Vue + vuetifyjs应用实践
分享一个以前学vue时自己练手的一个小项目,项目使用vue-cli3创建,UI库用的是vuetifyjs,vuetifyjs官网:https://vuetifyjs.com/ 数据来源是网上随便找的一 ...
- qt程序添加文件版本号
1.需要一个 *.rc 文件,用以保存相关信息.比如添加一个 app.rc 里面内容如下所示: IDI_ICON1 ICON DISCARDABLE "app.ico" ----- ...
- CentOS7——搭建LNMP环境(WordPress案例)
CentOS7--搭建LNMP环境(WordPress案例) LNMP组成介绍 LNMP(Linux-Nginx-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统 ...
- 附024.Kubernetes全系列大总结
Kubernetes全系列总结如下,后期不定期更新.欢迎基于学习.交流目的的转载和分享,禁止任何商业盗用,同时希望能带上原文出处,尊重ITer的成果,也是尊重知识.若发现任何错误或纰漏,留言反馈或右侧 ...
- 机器学习中的标准化方法(Normalization Methods)
希望这篇随笔能够从一个实用化的角度对ML中的标准化方法进行一个描述.即便是了解了标准化方法的意义,最终的最终还是要:拿来主义,能够在实践中使用. 动机:标准化的意义是什么? 我们为什么要标准化?想象我 ...
- Android学习笔记触摸事件
案例代码: activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Relativ ...
- Redis系列(四):数据结构String类型中基本操作命令和源码解析
1.介绍 string类型本质上是char[]数组的封装 中文网:http://www.redis.cn/commands.html#string 2.常用命令 set 命令 set命令的时间复杂 ...
- C#基础——IO
最近一直忙着做项目,偶尔会碰到一些文件读写方面的需求,当我回忆读写的代码时,发现脑子里存在诸多空白.这是不妙的,于是连忙翻出以前记下的笔记,上面还存在着我当初写下的知识点.怕以后哪天笔记找不到了或者有 ...
- JAVA设计模式 1 设计模式介绍、单例模式的理解与使用
数据结构我们已经学了一部分了.是该了解了解设计模式了.习惯了CRUD的你,也该了解了解这一门神器.我为啥要说是神器呢? 因为在大厂的面试环节.以及很多的比如 Springboot Mybatis 等开 ...
- Linux下搭建mysql
[准备环境] Linux centos7 [mysql安装步骤] 1.首先确定centos版本 cat /etc/redhat-release 2.yum安装 yum -y install mar ...