vue项目中使用mock

923 阅读2分钟

前言

环境变量:process.env.NODE_ENV

process对象是全局变量,它提供当前node.js的有关信息,以及控制当前node.js的有关进程,env是process的一个属性;

NODE_ENV不是process.env对象上原有的属性,它是我们自己添加上去的一个环境变量,用来确定当前所处的开发阶段。一般生产阶段设为production,开发阶段设为develop,当然也可自己定义标识字段,

然后在脚本中读取process.env.NODE_ENV。

情况一 vue-cli3.0中的process.env.NODE_ENV

vue-cli3使用DefinePlugin方式帮我们把process.env.NODE_ENV配置好了,webpack全局变量里,使用vue-cli-service就好

development:开发环境 production:生产环境 test:测试环境下 扩展:cli3.0下 根目录 .env .env.development 是Vue添加到process.env的封装入口 (VUE_APP_)

情况二 vue-cli3.0之前 process.env.NODE_ENV 需要自己添加上去

需要在package.json文件的scripts里面添加命令

安装 npm install --save-dev cross-env (不要问我为什么,window内核和liux内核不兼容) cross-env:是一款运行跨平台设置和使用环境变量的脚本

dev": "cross-env NODE_ENV=development", "build": "cross-env NODE_ENV=production",

设置之后,我们可以在脚本中使用process.env.NODE_ENV了(可以满足大部分需求了),但是不能在模块中使用 --- DefinePlugin

DefinePlugin允许我们创建全局变量,可以在编译时进行设置,即在webpack.config.js中添加如下代码配置全局变量信息 module.exports = { plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) } }) ] }

正文

1.接口api引用层添加mock标识 例:export const queryProductList = params => fetch(api.QUERY_PRODUCT_LIST, params, 'get', 'mock')

2.api封装层 根据 mock标识(mock)+ 环境标识(rocess.env.NODE_ENV)替换接口地址 例:

    if (mock && process.env.NODE_ENV === 'testing') {}

   url = modifyUrl('966', extractUrl[1]) 传入api-mock的项目标识,接口路径

注:一个项目里多个服务的时候,注意区分地址

3.处理URl 导出新的api-mork地址

   function modifyUrl (port, halfUrl) {
      return 'http://j-api.jd.com/' + 'mocker/data?p=' + port + '&v=' + method.toLocaleUpperCase() + '&u=/' + halfUrl
   }