Vue Cli 之 环境变量和模式

news2024/11/17 15:36:39

一、环境变量

​ 我们在使用 Vue-cli 创建的Vue项目中,可以在构建和运行时为项目设置环境变量,这些环境变量会根据环境(模式)的不同,而自动注入到项目中,也就是说我们可以根据环境不同,设置不同的环境变量或者给同个环境变量赋予不同的值,从而实现不同的效果。

​ 但是请不要在环境变量中存储任何机密敏感信息(秘钥等),因为环境变量会随着构建打包嵌入到输出的代码中,这意味着任何人都有可能看到这些变量的值,从而造成信息泄露。

1、 环境变量只能放置在项目根目录下的特定.env环境文件中:
.env          // 通用文件,在所有环境中都会被注入到项目中
.env.local    // 本地通用文件,只有在本地运行的所有环境中都会被注入到项目中,但是会被git忽略,不能提交到git仓库中
.env.[mode]   // 模式专用文件,只有在指定的mode模式下,才会注入到项目中 
.env.[mode].local // 本地模式专用文件,只有在本地运行的指定的mode模式下,才会注入到项目中,且会被git忽略,不能提交到git仓库中

// 例如
.env.development   // development模式专用文件,只有在development模式下,才会注入到项目中 
.env.development.local  // 本地development模式专用文件

​ 如果项目中同时声明了多个个不同类型环境文件,并且这些文件中存在同名的环境变量时,会根据 .env.[mode].local > .env.[mode] > .env.local > .env 的优先级先后顺序决定环境变量的值,最终环境变量的值会取优先级最高的环境文件中的那个值。

// 多个环境文件
// .env
VUE_APP_AAA=aaa
// 如果只有上面的文件 则最终变量值为 aaa

// .env.local
VUE_APP_AAA=bbb
// 如果只有上面的两个文件 则最终变量值为 bbb

// .env.development
VUE_APP_AAA=ccc
// 如果只有上面的三个文件 则最终变量值为 ccc

// .env.development.loacal
VUE_APP_AAA=ddd
// 如果只有上面的四个文件 则最终变量值为 ddd

​ 由于环境文件是在运行vue-cli-service 运行命令时载入的,因此当我们修改了环境文件时,必须重新启动项目才能生效。

2、 环境变量以键值对的形式在环境文件中声明

​ 目前只有NODE_ENVBASE_URL两个特殊变量和以VUE_APP_开头声明的自由变量,能够通过webpack.DefinePlugin注入到项目中:

VUE_APP_VAR=123abc
BASE_URL=./abc(不推荐修改该变量)
NODE_ENV=test (不推荐修改该变量)

​ 两个特殊变量NODE_ENVBASE_URL都拥有自己的默认属性值,因此不建议在环境文件中声明同名变量:

  • NODE_ENV: 值为"development""production""test" 三者之一,具体的值取决于项目运行的模式。
  • BASE_URL:值为vue.config.js中的publicPath选项的值,即项目在部署时的基础路径。
3、 环境变量在项目中需要通过process.env.变量名的形式来访问

​ 如果我们想在项目的页面中使用环境变量,那么我们需要通过process.env.变量名的方式来访问对应值:

console.log(process.env.VUE_APP_VAR) // 123abc
console.log(process.env.BASE_URL) // ./abc
console.log(process.env.NODE_ENV) // test

​ 除了在普通页面中使用环境变量之外,我们也可以在项目的public/index.html中以HTML插值(lodash template语法)的方式来使用环境变量:

​ ① <%= 变量名 %>:用来做不转义插值,如果插入的环境变量中,包含HTML标签,则会被浏览器解析,类似于设置innerHTML

​ ② <%- 变量名 %>:用来做HTML转义插值,如果插入的环境变量中,包含HTML标签,不会被浏览器解析,只是作为字符串插入到页面上,类似于设置innerText

​ ③ <% if(变量名) %>:用来做JavaScript流程控制。

// .env 

// 声明一个带有HTML标签的环境变量
VUE_APP_HTML=<h3>h3标题</h3>
<!-- index.html -->

<!-- 在元素属性中使用 -->
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<!-- 在JS中使用 -->
<script>
  console.log('process.env.NODE_ENV----<%= NODE_ENV %>');
</script>
<!-- 转义插值 -->
<div><%- VUE_APP_HTML %></div>
<!-- 不转义插值 -->
<div> <%= VUE_APP_HTML %> </div>
<!-- 进行JS流程控制 -->
<% if(NODE_ENV==='development' ) { %>
		<div>开发</div>
<% } %>
<% if(NODE_ENV==='test' ) { %>
		<div>测试</div>
<% } %>
<% if(NODE_ENV==='production' ) { %>
	<div>生产</div>
<% } %>

页面效果:

在这里插入图片描述

二、模式

​ 默认情况下,一个通过Vue Cli 创建的Vue项目,拥有三种模式:developmenttestproduction,这三种模式分别默认对应了不同的项目执行命令,从而创建不同的webpack 配置:

development

​ 该模式为开发模式,默认对应vue-cli-service serve命令,也是默认的启动项目运行命令,该模式将会创建一个用于开发时快速构件的webpack配置,启用代码热更新、不会对代码进行优化和压缩、打包速度快但生成的代码体积较大。

test

​ 该模式为测试模式,默认对应vue-cli-service test:unit命令,该模式将会创建一个优化过后的,用于单元测试的 webpack 配置,它并不会处理图片以及一些对单元测试非必需的其他资源,只会去执行所有的测试用例,并在测试完成后自动关闭。

production

​ 该模式为生产模式,默认对应vue-cli-service buildvue-cli-service test:e2e命令,该模式将会创建一个用于部署的webpack配置,对项目进行性能优化,对代码进行优化和压缩,并打包生成用于在生产环境部署的文件,打包速度会比较慢,但是生成的代码文件体积较小,加载速度较快。

​ 除了根据执行的命令,运行对应的默认项目模式之外,我们还可以通过在执行命令时,在命令后面加上--mode 模式,覆盖默认的模式,显式的指明要运行的项目模式。

​ 这三种模式除了会决定webpack配置之外,还会创建一个名为NODE_ENV的环境变量,该环境变量的值为当前的项目模式:developmenttestproduction。如果我们在对应的环境文件中提前声明了环境变量NODE_ENV最好不要!),那么我们需在在执行vue-cli-service ***命令之前移除掉这个环境变量,或者在执行命令时,显式的指明要运行的项目模式。否则该环境变量的值,会干扰项目的运行模式。

// package.json(待补充)
 "scripts": {
    "serve": "vue-cli-service serve", // 默认为 development 模式
    "build": "vue-cli-service build", // 默认为 production 模式
    "test": "vue-cli-service test:unit", // 默认为 test 模式
    "serve2": "vue-cli-service serve --mode production", // 显式的指定运行 production 模式
   	"build2": "vue-cli-service build --mode test", // 显式的指定运行 test 模式
    "test2": "vue-cli-service test:unit --mode development", // 显式的指定运行 development 模式
  },

在页面中获取项目的运行模式:

// process.env.NODE_ENV 即可获取运行模式
mounted() {
    console.log(process.env.NODE_ENV);
},

三、参考文档

Vue Cli - 模式和环境变量

Vue Cli - 插值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二进制单节点搭建 Kubernetes v1.20

目录 第一章.操作系统初始化配置 1.1.安装环境部署 1.2.部署 docker引擎 第二章.部署 etcd 集群 2.1.ETCD简述 2.2.准备签发证书环境 在 master01 节点上操作 2.3. 生成Etcd证书​​​​​​​ 2.4.在 node01 节点上操作 在 node02 节点上操作 2.5.部署 Master 组件…

SpringBoot ( 四 ) 接值

2.5.接值 通过方法的参数来接收请求传来值 请求时传值的方式有三种方式 : URL?namevalueform表单Ajax 异步传值 接收传来的值有三类 : 单一值对象数组 2.5.0.传值 2.5.0.1.URL?传值 URL?标识1值1&标识2值2 URL后面使用 ? 连接参数, 每组参数使用 连接标识与值, 多…

10.过滤器

过滤器是做文本格式化的&#xff0c;只能用在 插值表达式 与 v-bind 上&#xff0c;在vue3中已经被弃用了&#xff0c;这里我简单记录一下并写一下在vue3的替代方法 目录 1 基本使用 1.1 vue2中的写法 1.2 vue3的替代 2 私有过滤器与全局过滤器 2.1 vue2的写法 2.2…

shell脚本----数组

文章目录 一、数组定义的方法二、数组的操作2.1 数组的输出2.2 删除数组2.3 数组切片2.4 数组的替换2.5 判断数组中是否有空值2.6 追加函数2.7 向函数传入参数 一、数组定义的方法 数组定义的规则 数组中的每个元素分分隔符一定为空格隔开每个元素都拥有与其对应的下标&#…

Kubesphere流水线实现蓝绿发布

Kubesphere流水线实现蓝绿发布 1. Gitlab仓库准备 1.1 创建仓库 新建空白项目,名字随便取 greenweb复制克隆地址 http://192.168.31.199/deploy/greenweb.git1.2 初始化并上传代码 克隆并初始化代码仓库 mkdir git cd git git clone http://192.168.31.199/deploy/green…

AIMD 为什么收敛(tcp reno/cubic 为什么好)

TCP 拥塞控制目标是缓解并解除网络拥塞&#xff0c;让所有流量公平共享带宽&#xff0c;合在一起就是公平收敛。 AIMD(几乎所有与拥塞控制相关的协议或算法都有 AIMD 的影子&#xff0c;包括 RoCE&#xff0c;BBRv2) 为什么收敛&#xff1f;我一般会给出下面的老图&#xff1a;…

1区(TOP)极速送审,5月SCI/SSCI/EI刊源表已更新,

2023年5月SCI/SSCI/EI期刊目录更新 5月我处新增多本1-2区高分区新刊&#xff0c;包括计算机、医学、环境、化学、材料、生物、工程、社科领域&#xff0c;新刊版面极速送审~ 以下是本月重点期刊推荐&#xff0c;可作参考&#xff1a; 计算机类新刊&#xff1a; 1区计算机科…

钓鱼邮件演练项目实战

1、 使用 setoolkit 克隆站点 Setoolkit 是一个万能的社工工具(社会工程学工具集合) ┌──(root Cwillchris)-[~] └─# setoolkit 翻译成中文: 从菜单中选择: 1)社会工程攻击 2)渗透测试(快速通道) 3)第三方模块 4)更新社会工程师工具包 5)更新 SET 配置…

使用 spring 的 IoC 的实现账户的CRUD(2)双层实现+注解开发

在http://t.csdn.cn/yucl4的基础上进行注解开发 【分析】 xml文件其中spring容器中的bean,因此通过注解把这些放到容器中即可 component:相当xml中的bean的id: 如果不指定 value 属性&#xff0c;默认 bean 的 id 是当前类的类名, 首字母小写。 Controller Service Reposito…

计算机毕业论文选题推荐|软件工程|系列二

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)门窗账务管理系…

C++——类和对象(6)

作者&#xff1a;几冬雪来 时间&#xff1a;2023年5月10日 内容&#xff1a;C类和对象内容讲解 目录 前言&#xff1a; 1.取地址操作符重载&#xff1a; 2.构造函数&#xff08;进阶&#xff09;&#xff1a; 1.初始化列表&#xff1a; 2.static成员&#xff1a; 结尾…

数据可视化工具 - ECharts饼形图的编写

1 饼形图 1年龄分布模块制作 1.1 官网找到类似实例&#xff0c; 适当分析&#xff0c;并且引入到HTML页面中 <!DOCTYPE html> <html> <head><meta charset"utf-8"/><title>ECharts</title><!-- 引入刚刚下载的 ECharts 文件…

Android WebRTC+SRS/ZLM视频通话(4):Android使用WebRTC推流SRS/ZLMediaKit

Android WebRTCSRS/ZLM视频通话&#xff08;4&#xff09;&#xff1a;Android使用WebRTC推流SRS/ZLMediaKit 来自奔三人员的焦虑日志 接着上一章内容&#xff0c;继续来记录Android是如何使用WebRTC往SRS或ZLMediaKit进行推流。想要在Android设备上实现高质量的实时流媒体推送…

VirtualBox+Vagrant

1.下载VirtualBox 1.下载 VirtualBox官网下载 下载过程无特别注意事项&#xff0c;注意调整到非 C 盘位置即可&#xff0c;其他部分皆为默认设置 2.修改虚拟电脑存储位置 1.将C:\Users\用户名下的VirtualBox VMs文件夹复制到自定义目标文件夹中 2.打开VirtualBox,在全局设置…

嵌入式TCP/IP协议栈-LwIP

文章目录 LWIP是什么基础知识OSI七层模型TCP/IP五层模型LwIP的模型常见协议ARP协议ICMP协议DHCP协议DNS协议 LwIP APISocket大端模式与小端模式地址字节序IP地址转换 网络并发 LWIP是什么 LWIP是一个轻量级的TCP/IP协议栈&#xff0c;其全称为Lightweight IP&#xff0c;它专门…

UNIX网络编程卷一 学习笔记 第十二章 IPv4与IPv6的互操作性

未来数年内&#xff0c;因特网也许会逐渐从IPv4过渡到IPv6&#xff0c;在过渡阶段&#xff0c;基于IPv4的现有应用能与基于IPv6的全新应用协同工作非常重要。例如&#xff0c;厂商不应只提供仅能与IPv6 telnet服务器程序协同工作的telnet客户程序&#xff0c;而应该提供既能与I…

环境搭建:Visual Studio的安装和创建C++项目

Visual Studio的安装和创建C项目 引言前言下载Visual Studio安装包安装Visual Studio创建项目小结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0c;让世界没有难学的技术。 &#x1f449; &#x1f396;️ C…

第五十章 Unity Input Manager 输入系统(上)

Unity的输入系统支持多种输入设备&#xff0c;比如键盘和鼠标&#xff0c;游戏手柄&#xff0c;触摸屏&#xff0c;VR和AR控制器等等。Unity 通过两个独立的系统提供输入支持&#xff1a;第一&#xff0c;输入管理器 (Input Manager) 是 Unity 核心平台的一部分&#xff0c;默认…

数据可视化一、ECharts

零、文章目录 数据可视化一、ECharts 1、数据可视化 &#xff08;1&#xff09;数据可视化 数据可视化主要目的&#xff1a;借助于图形化手段&#xff0c;清晰有效地传达与沟通信息。数据可视化可以把数据从冰冷的数字转换成图形&#xff0c;揭示蕴含在数据中的规律和道理。…

TGANet:用于改进息肉分割的文本引导注意力

文章目录 TGANet: Text-Guided Attention for Improved Polyp Segmentation摘要本文方法编码器模块Feature Enhancement ModuleLabel AttentiondecoderMulti-scale Feature Aggregation损失函数 实验结果 TGANet: Text-Guided Attention for Improved Polyp Segmentation 摘要…