VUE学习:四.环境配置

sadwind2024-02-29笔记74

前言

前端项目开发中,一般会有几个环境:

  • dev:是程序员们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告

  • sit:dev 环境完成需求开发就可以将代码打包到 sit 环境,给测试验证相关功能

  • uat:一般是克隆一份生产环境的配置,sit 测试没有问题就可以将代码打包到 uat 环境,然后由需求提出方验收需求

  • prod:uat 环境完成需求验收就可以将代码部署到正式环境

英文缩写英文中文示例是否必须主要用户
devDevelopment开发环境dev.zhoubichuan.com开发
sitSystem Integrate Test系统集成测试环境(内测)sit.zhoubichuan.com功能测试
uatUser Acceptance Test用户验收测试环境uat.zhoubichuan.com产品
petPerformance Evaluation Test性能评估测试环境(压测)pet.zhoubichuan.com性能测试
simSimulation高仿真环境sim.zhoubichua.com
prodProduction生产环境zhoubichua.com用户

#1.vue-cli 2.x 中

#1.1 配置环境

  • webpack 通过 DefinePlugin 内置插件将 process.env 注入到客户端代码中。

// config/dev.env.jsmodule.exports = merge(devEnv, {
  NODE_ENV: '"dev"', // 注意value值需要序列化
  BASE_API: '"http://dev.com"',})
1
2
3
4
5
//build/webpack.dev.conf.jsconst env = require('../config/dev.env')...{
  plugins: [
    new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: env,
      },
    }),
  ],}...
1
2
3
4
5
6
7
8
9
10
11
12
13
  • 不同的打包/运行命令,打包/运行不同环境代码的同时将环境变量注入到打包/运行后的代码中 package.json

..."scripts":{
  "dev":"vue-cli-service --mode dev",
  "sit":"vue-cli-service --mode sit",
  "build:dev":"vue-cli-service build --mode dev",
  "build:sit":"vue-cli-service build --mode sit"}...
1
2
3
4
5
6
7
8

#1.2 使用环境变量

// main.jsconsole.log("环境变量:" + process.env.NODE_ENV)
1
2

#2.vue-cli 3.x 中

#2.1 配置文件

原理

在根目录下创建以下形式的文件进行不同环境下变量的配置,webpack 内部会按照一定的规则加载这些文件

.env                 #在所有的环境中被载入.env.local           #在所有的环境中被载入,但会被git忽略.env.[mode]          #只在指定的模式中被载入,如.env.sit.env.[mode].local    #只在指定的模式中被载入,但会被git忽略,如.env.sit.local
1
2
3
4
  • 1.配置命令

    // package.json"scripts":{
      "serve:dev":"vue-cli-service serve --mode dev", //npm run serve:dev,dev运行命令,默认环境 development
      "build:dev":"vue-cli-service build --mode dev" //npm run build:dev,dev打包命令,默认环境 production}
    1
    2
    3
    4
    5
  • 2.配置相关环境变量

    // env.devNODE_ENV=devVUE_APP_BASE_URL=http://dev.comVUE_APP_TITLE=宇宙管理系统
    1
    2
    3
    4

    注意

    配置的变量需要以VUE_APP_开头,而NODE_ENVBASE_URL这两个特殊变量除外

  • 3.使用相关环境变量

    //vue.config.jsconsole.log(process.env.NODE_ENV) //dev
    1
    2
    //src/utils/http.jsaxios.create({
      baseURL: process.env.VUE_APP_BASE_URL, // http://dev.com
      timeout: 500,})
    1
    2
    3
    4
    5
  • 4.配置文件的权重

    由配置公共配置案例,可以得出结论,相同配置项的权重:
    .env.[mode].local > .env.[mode] > .env.local > .env # 相同配置项权重大的覆盖小的,不同配置项它们会进行合并操作
    1












  • 5.配置文件的局限性

    只能配置静态变量




























#2.2 环境注入

原理

webpack 通过 DefinePlugin 内置插件将 process.env 注入到客户端代码中。

//vue.config.js{
  ...
  plugins:[
    new webpack.DefinePlugin({
      'process.env':{
        NODE_ENV:JSON.stringify(process.env.NODE_ENV)
      }
    })
  ]
  ...}
1
2
3
4
5
6
7
8
9
10
11
12
  • 1.配置环境变量

    .env 这样的配置文件无法使用动态参数,这时候我们可以在根目录下新建 config 文件夹用于存放一些额外的配置文件。

































  • 2.注入环境变量

    // vue.config.jsconst envConfig = require("./envConfig")const merge = require("webpack-merge")module.exports ={
      ...
      chainWebpack:config = {
        config.plugin('define')
        .tap(args => {
          let name = 'process.env'
          let env = process.argv[process.argv.length - 1]
          args[0][name] = merge(args[0][name],envConfig[env])
          return args    })
      }
      ...}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
  • 3.使用环境变量

    {
      "NODE_ENV":"dev",
      "VUE_APP_TITLE":"stage mode2",
      "BASE_URL":"/vue/",
      "$Time":"xxx"}
    1
    2
    3
    4
    5
    6

#3.场景应用

#3.1 后端调试

  • 背景:有些项目比较复杂,接口 a 依赖接口 b,接口 b 依赖接口 c,中间还有很多页面流程需要走;如果在 postman 中调试接口很麻烦,有很多页面生成的数据要自己造

  • 可以借用线上的前端开发环境,页面接口用本地的接口(直接优先使用在浏览器 localStorage 中的变量)

    // commonUrl.jsconst url = "www.xxx.com"if (process.env.NODE_ENV !== "production") {
      url = localStorage.url || url}
    1
    2
    3
    4
    5
  • 后端可以直接在线上dev环境中配置localStorage.url = 自己本地接口地址,方便调试

总结

在 vue-cli2.x 和 3.x 中都可以利用 DefinePlugin 来配置环境变量,这种方式的优点在于更加灵活,而在 vue-cli3.x 中还支持配置静态文件类型的配置文件(.env 文件)这种方式配置更加直观。


relate content

VUE学习:六.页面布局

VUE学习:六.页面布局

前言页面布局决定了一个页面的整体结构,一个好的布局能使整个页面一眼看上去结构清晰,层次分明,可以简单地将组件分为:容器组件与展示组件适配规则(pc,移动) 分辨率调整#1.职能划分Vue 组件按照职能...

网站搜索服务已经更换成XUNSEARCH

这个比上一个SPHINX用来简单多了,也不存在启动时动不动出错,莫名其妙的错误。简单配置一下,导入索引、查询都挺简单。用这个就能导入数据库,创建索引了/usr/local/xunsearch/sdk/...

TP6 一条数据库查询代码 column索引值理解

// 返回数组 Db::table('think_user')->where('status',1)->column('name'...

通过COOKIE来控制广告显示

现在有一个广告,但是广告的形式不太友好,担心加载这个广告会严重影响网站浏览体验,不弄吧,网站又一点收益没有,于是想到一个办法,让网站在一定时间里,只展示一次这样的广告,这样能一定程序缓解网站访问者的容...

VUE学习:三.VueCLI 配置

前言掌握一些项目中常见的 webpack 配置,能够从容应对一些开发场景问题#1.vue-cli 2.x#1.1 css 相关style-loader ( 处理 style 内联样式 )css-loa...

Python爬虫高级开发工程师 教程

Python爬虫高级开发工程师 教程

Python爬虫高级开发工程师的教程,帮助你从零开始了解如何制作一个PYTHON爬虫,感兴趣的下载学习~夸克网盘:https://pan.quark.cn/s/61b702c0b137#/list/s...

Post Reply    

◎Welcome to participate in the discussion.