VUE学习:四.环境配置

sadwind2024-02-29笔记73

前言

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

  • 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

新的启程:得想点办法 好点子

因为个人原因,想做个网站,利用空余时间,网上收集整理一些资源,放些广告赚点小钱,目前看来很难实现了。申请了好多次广告联盟,都被拒绝了,大概理由就是网站流量不够,内容不多,原创内容少,仔细一想,这还是很...

WORDPRESS 使用结巴实现搜索中文分词

详细安装及说明参考以下,已经有比较详细的教程了:https://cloud.tencent.com/developer/article/2221841 GITHUB:https://github.co...

VUE学习:十.编码技巧

前言总结一些开发中常见的问题,优化改善编码技巧,提高代码质量#1.条件判断常见条件判断iflet name = "case1"if (nam...

VUE学习:六.页面布局

VUE学习:六.页面布局

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

VUE学习:一.开发工具

VUE学习:一.开发工具

前言了解前端项目开发中环境的相关配置,工具的相关使用技巧等,有助于快速解决开发时遇到的各种问题,提高开发效率#1.Node.js注意实际开发中团队中 node 版本最好保持一致,包括各种环境(dev、...

使用FunAdmin二次开发 新建一个应用需要哪些东西

backend是FunAdmin默认的后台应用。1,先建一个数据表,如fun_dealer.2,根据表建一个模型,如:app/backend/model/Dealer.php3,根据表名,建一个控制器...

Post Reply    

◎Welcome to participate in the discussion.