声明:本文由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正式、测试环境接口地址本地运行及打包命令配置的更多相关文章

  1. 本地运行aws lambda credential 配置 (missing credential config error)

    参照这篇文章 http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-sha ...

  2. idea构建spark开发环境,并本地运行wordcount

    1.首先现在idea,官网:https://www.jetbrains.com/idea/ 2.安装jdk1.8,scala2.11 3.下载idea后,需要在idea中安装scala的插件,安装的方 ...

  3. 基于SecureCRT的测试环境的克隆的linux/vi相关命令

    #chmod -R 777*; 参数-R:对当前目录下的所有档案与子目录进行相同的权限 变更(即以递归的方式逐个变更). *:通配符,指的是当前目录下的所有文件及目录. 所有文件及其子目录的文件拥有者 ...

  4. Maven对不同的测试环境用不同的参数进行打包

    通过mvn package -P ${env} 加载不同配置文件 1.pom.xml中的配置 filter-dev.properties jdbc.properties

  5. 懒人npm运行和打包命令

    源码: @echo off&setlocal EnableDelayedExpansion & color 3e :start title npm 常用命令 by:ceet@vip.q ...

  6. vue2+axios在不同的环境打包不同的接口地址

    node.js的环境变量 process process 对象是一个 global (全局变量),提供有关信息,控制当前 Node.js 进程.作为一个对象,它对于 Node.js 应用程序始终是可用 ...

  7. MapReduce两种执行环境介绍:本地测试环境,服务器环境

    本地测试环境(windows):1.在windows下配置hadoop的环境变量2.拷贝debug工具(winutils.exe)到hadoop目录中的bin目录,注意winutils.exe的版本要 ...

  8. NodeJs 开发微信公众号(二)测试环境部署

    由于卤煮本人是做前端开发的,所以在做公众号过程中基本上没有遇到前端问题,在这方面花的时间是最少的.加上用了mui框架(纯css界面)和自己积累的代码,很快地开发出了界面来.接着是后台开发.卤煮选的是n ...

  9. 阿里开源 KT Connnect,轻量级云原生测试环境治理平台来啦!

    作者| 阿里云技术专家 郑云龙(砧木) 目前越来越多的开发者开始采纳 Kubernetes 管理基础设施环境,并通过 Kubernetes 完成日常的开发,测试以及生产发布活动,为了能够有效的帮助开发 ...

随机推荐

  1. Spring zuul 快速入门实践 --看zuul如何进行服务转发

    zuul 作为springCloud 的全家桶组件之一,有着不可或缺的分量.它作为一个普通java API网关,自有网关的好处: 避免将内部信息暴露给外部: 统一服务端应用入口: 为微服务添加额外的安 ...

  2. PHP 安装 XDebug

    下载XDebug扩展 下载对应PHP版本的Xdebug 线程安全(TS)和非线程安全(NTS) 安装Xdebug扩展-php.ini [XDebug] xdebug.profiler_output_d ...

  3. 数据结构与算法-python描述-单向循环链表

    # coding:utf-8 # 单向循环链表的相关操作: # is_empty() 判断链表是否为空 # length() 返回链表的长度 # travel() 遍历 # add(item) 在头部 ...

  4. 面试官:换人!他连 TCP 这几个参数都不懂

    每日一句英语学习,每天进步一点点: 前言 TCP 性能的提升不仅考察 TCP 的理论知识,还考察了对于操心系统提供的内核参数的理解与应用. TCP 协议是由操作系统实现,所以操作系统提供了不少调节 T ...

  5. HttpUtil工具类,发送Get/Post请求,支持Http和Https协议

    HttpUtil工具类,发送Get/Post请求,支持Http和Https协议 使用用Httpclient封装的HttpUtil工具类,发送Get/Post请求 1. maven引入httpclien ...

  6. [转] Ubuntu的apt-get 设置代理的方法

    点击阅读原文 新立得软件管理器这种图形化的代理设置很明了,这里介绍下终端命令行的网络代理设置,这样大家就可以通过代理进行apt-get了. 方法一: 如果只是想临时使用http代理,可以在使用apt- ...

  7. Redis学习笔记(二十一) 事务

    文章开始啰嗦两句,写到这里共21篇关于redis的琐碎知识,没有过多的写编程过程中redis的应用,着重写的是redis命令.客户端.服务器以及生产环境搭建用到的主从.哨兵.集群实现原理,如果你真的能 ...

  8. Communication【floyd判环+并查集】

    Communication 题目链接(点击) 题目描述 The Ministry of Communication has an extremely wonderful message system, ...

  9. Dubbo——服务调用过程

    文章目录 引言 服务的交互 服务降级 集群容错 服务调用 服务端接收请求 总结 引言 经过之前文章的铺垫,现在可以来分析服务的交互调用过程了. 服务的交互 服务降级 从名字上看我们不难理解MockCl ...

  10. TCP 重置攻击的工作原理

    原文链接:https://fuckcloudnative.io/posts/deploy-k3s-cross-public-cloud/ TCP 重置攻击 是使用一个单一的数据包来执行的,只有几个字节 ...