vue-cli3环境变量与分环境打包的方法示例


Posted in Javascript onFebruary 18, 2019

第一步 : 了解环境变量概念

我们可以根目录中的下列文件来指定环境变量:

.env        # 在所有的环境中被载入
.env.local     # 在所有的环境中被载入,但会被 git 忽略
.env.[mode]     # 只在指定的模式中被载入
.env.[mode].local  # 只在指定的模式中被载入,但会被 git 忽略

环境变量文件只包含环境变量的“键=值”对:

FOO=bar
VUE_APP_SECRET=secret // 只有VUE_APP_开头的环境变量可以在项目代码中直接使用

除了 自定义的VUE_APP_* 变量之外,在你的应用代码中始终可用的还有两个特殊的变量:

  • NODE_ENV - 会是 "development"、"production" 或 "test"中的一个。具体的值取决于应用运行的模式。
  • BASE_URL - 会和 vue.config.js 中的 publicPath 选项相符,即你的应用会部署到的基础路径。

为一个特定模式准备的环境文件的 (例如 .env.production) 将会比一般的环境文件 (例如 .env) 拥有更高的优先级。

模式概念:

模式是 Vue CLI 项目中一个重要的概念。一般情况下 Vue CLI 项目有三个默认模式:

  • development 模式用于 vue-cli-service serve
  • production 模式用于 vue-cli-service build 和 vue-cli-service test:e2e
  • test 模式用于 vue-cli-service test:unit

模式不等同于 NODE_ENV,一个模式可以包含多个环境变量。也就是说,每个模式都将 NODE_ENV的值设置为模式的名称(可重新赋值更改)——比如在 development 模式下 NODE_ENV 的值会被设置为 "development"。

你可以通过为 .env 文件增加后缀来设置某个模式下特有的环境变量。比如,如果你在项目根目录创建一个名为 .env.development 的文件,那么在这个文件里声明过的变量就只会在 development 模式下被载入。

你可以通过传递 --mode 选项参数为命令行覆写默认的模式。例如,如果你想要在构建命令中使用开发环境变量,请在你的 package.json 脚本中加入:

"dev-build": "vue-cli-service build --mode development",

环境变量的使用 :

只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中(即在项目代码中使用)。你可以在应用的代码中这样访问它们:

console.log(process.env.VUE_APP_SECRET)

理解指令 , 模式 , 环境变量之间的关系

我们在项目中的package.json经常能看见以下这样的指令

vue-cli3环境变量与分环境打包的方法示例

在一个 Vue CLI 项目中,@vue/cli-service 安装了一个名为 vue-cli-service 的命令。你可以在 npm scripts 中以 vue-cli-service、或者从终端中以 ./node_modules/.bin/vue-cli-service 访问这个命令。

vue-cli-service serve

用法:vue-cli-service serve [options] [entry]
选项:
--open 在服务器启动时打开浏览器
--copy 在服务器启动时将 URL 复制到剪切版
--mode 指定环境模式 (默认值:development)
--host 指定 host (默认值:0.0.0.0)
--port 指定 port (默认值:8080)
--https 使用 https (默认值:false)

vue-cli-service build

用法:vue-cli-service build [options] [entry|pattern]
选项:
--mode 指定环境模式 (默认值:production)
--dest 指定输出目录 (默认值:dist)
--modern 面向现代浏览器带自动回退地构建应用
--target app | lib | wc | wc-async (默认值:app)
--name 库或 Web Components 模式下的名字 (默认值:package.json 中的 "name" 字段或入口文件名)
--no-clean 在构建项目之前不清除目标目录
--report 生成 report.html 以帮助分析包内容
--report-json 生成 report.json 以帮助分析包内容
--watch 监听文件变化

以上是两个常用的cli指令 , 他们默认对应的分别是development和production模式 , 如果还想了解其他指令 , 可以访问: https://cli.vuejs.org/zh/guide/cli-service.html#cli-%E6%9C%8D%E5%8A%A1 CLI 服务

那么接下来 , 我们就开始创建一个用于打包测试环境的模式;

修改package.json

添加一行命令

"test": "vue-cli-service build --mode test"

添加.env.test文件

在项目根路径创建.env.test文件,内容为

NODE_ENV='production' //表明这是生产环境(需要打包)
VUE_APP_CURRENTMODE='test' // 表明生产环境模式信息
VUE_APP_BASEURL='http://***.****.com:8000' // 测试服务器地址

修改项目中的api接口文件

在我的项目中,一般会创建一个api.js 来管理所有的接口url

因为我们在本地开发环境中是通过代理来连接服务器的,所以将url写成这

`${baseUrl}/apis/v1/login`,

在文件开头通过环境变量改变baseUrl

let baseUrl = '';
if (process.env.NODE_ENV == 'development') {
 baseUrl = "" 
} else if (process.env.NODE_ENV == 'production') {
 baseUrl = process.env.VUE_APP_BASEURL
} else {
 baseUrl = "" 
}

当需要为测试环境进行打包的时候 , 我们只需要运行下面指令进行打包

npm run test

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
juqery 学习之六 CSS--css、位置、宽高
Feb 11 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
javascript定义变量时加var与不加var的区别
Dec 22 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
Oct 29 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
jQuery实现图片滑动效果
Mar 08 Javascript
JS中cookie的使用及缺点讲解
May 13 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
Aug 07 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
Aug 02 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 Javascript
原生JS实现汇率转换功能代码实例
May 13 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
Feb 18 #Javascript
JS基于开关思想实现的数组去重功能【案例】
Feb 18 #Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 #Javascript
Vue框架TypeScript装饰器使用指南小结
Feb 18 #Javascript
深入理解vue-class-component源码阅读
Feb 18 #Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
Feb 18 #Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
Feb 18 #jQuery
You might like
php基础知识:类与对象(5) static
2006/12/13 PHP
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
基于jquery实现发送文章到手机的代码
2014/12/26 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
js仿网易表单及时验证功能
2017/03/07 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python 多线程应用介绍
2012/12/19 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python如何为被装饰的函数保留元数据
2018/03/21 Python
windows下python和pip安装教程
2018/05/25 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
由面试题加深对Django的认识理解
2019/07/19 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
2020/04/21 Python
关于keras中keras.layers.merge的用法说明
2020/05/23 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
Nike英国官网:Nike.com (UK)
2017/02/13 全球购物
美国波西米亚风格精品店:South Moon Under
2019/10/26 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
学校运动会广播稿100条
2014/09/14 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
如何获取numpy array前N个最大值
2021/05/14 Python
Python基础学习之奇异的GUI对话框
2021/05/27 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python