vue-cli11模式&环境变量使用及说明

 更新时间:2025年10月28日 09:50:03   作者:fangyinggui  
本文主要介绍了Vue CLI项目中的模式和环境变量设置,Vue CLI有三种默认模式:开发、测试和生产,可以通过--mode选项参数覆写默认模式,环境变量可以从对应的环境文件中载入,NODE_ENV将决定应用的运行模式,同时,介绍了环境文件的加载优先级和规则

模式

【模式】~ 是 vue-cli 项目中一个重要的概念。

【分类】vue-cli 默认有 3 个模式:

  • development: 用于 vue-cli-service serve;
  • test: 用于 vue-cli-service test:unit;
  • production: 用于 vue-cli-service build & vue-cli-service test:e2e;

注意

1 、可通过传递 --mode 选项参数为命令行覆写默认的模式。

  • 例如:想要在构建命令中使用开发环境变量:
vue-cli-service build --mode development

2、当运行 vue-cli-service 命令时,所有的环境变量都从对应的环境文件中载入。

3、NODE_ENV将决定您的应用运行的模式,是开发,生产还是测试,因此也决定了创建哪种 webpack 配置。

  • 示例 1:通过将 NODE_ENV 设置为 “test”, vue-cli 会创建一个优化过后的,并且旨在用于单元测试的 webpack 配置,它并不会处理图片以及一些对单元测试非必需的其他资源。
  • 示例 2;NODE_ENV=development 创建一个 webpack 配置,该配置启用热更新,不会对资源进行 hash 也不会打出 vender bundles, 目的是为了在开发的时候能够快速重新构建。
  • 示例 3:当你运行 vue-cli-service build 命令时,无论你要部署到哪个环境,应该始终把 NODE_ENV 设置为 “production” 来获取可用于部署的应用程序。

4、若文件内不包含 NODE_ENV 变量,它的值将取决于模式

  • 例如:在 production 模式下被设置为 “production”, 在 test 模式下被设置为 “test”, 默认则是 “development”。

5、若在环境中有默认的 NODE_ENV, 应移除它或在运行 vue-cli-service 命令时明确地设置 NODE_ENV.

环境变量

【规则】vue-cli 项目可在根目录放置下列文件来指定环境变量:

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

【示例】一个环境文件只包含环境变量的 “键=值” 对:

Foo=bar
VUE_APP_NOT_SECRET_CODE=some_value

【注意】

1、不要在应用程序中存储任何机密信息;(例如:私有 API 秘钥)

2、环境变量会随着构建打包嵌入到输出代码,意味着任何人都有机会看到它;

3、只有 NODE_ENV, BASE_URL, 以 VUE_APP_ 开头的变量将通过 webpack.DefinePlugin 静态地嵌入到客户端侧的代码中。原因是为了避免意外公开机器上可能具有相同名称的私钥。

4、被载入变量将会对 vue-cli-service 的所有命令、插件和依赖可用。

【拓展】

dotenv 了解解析环境文件规则的细节,参考这个。

dotenv-expand 来实现变量扩展(Vue CLI 3.5+ 支持)。

FOO=foo
BAR=bar

CONCAT=$FOO$BAR # CONCAT=foobar

环境文件加载优先级

  • 为一个特定模式准备的环境文件(例如 env.production )将会比一般的环境文件(例如 .env) 拥有更高的优先级。
  • .local 优先级 高于 其他;见下面 Staging 示例中;
  • vue-cli 启动时 已经存在的环境变量 拥有最高优先级,并不会被 .env 文件覆写。
  • 环境文件发生变化,需要重启服务。因为:.env 环境文件是通过运行 vue-cli-service 命令载入的,因此需要重启服务。

示例: Staging 模式

1、准备环境变量文件

  • 1.1、假设有一个应用包含一个 .env 文件;
VUE_APP_TITL=My App
  • 1.2、和一个 .env.staging 文件;
NODE_ENV=production
VUE_APP_TITLE=My App(staging)

2、运行指令

2.1、指令 1:vue-cli-service build

会加载可能存在的 .env, .env.production, .env.production.local 文件然后构建出生产环境应用。

2.2、指令 2:vue-cli-service build --mode staging

会在 staging 模式下加载可能存在的 .env, .env.staging, .envstagin.local 文件然后创建出生产环境应用。

3、结论

2 种情况下,根据 NODE_ENV,构建出的应用都是生产环境应用的;

但在 staging 版本中, process.env.VUE_APP_TITLE 被覆写成了另一个值 “My App(staging)”。

客户端中使用环境变量

规则

规则:只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。

应用代码中访问: console.log(process.env.VUE_APP_SECRET)

构建过程中, precess.env.VUE_APP_SECRET 将会被相应的值所取代。

  • 在 VUE_APP_SECRET=secret 时,会被替换为 “secret”。
  • 在 VUE_APP_SECRET=noscret 时,会被替换为 “noscret”。

除了 VUE_APP_* 变量外,在应用代码中始终可用的还有 2 个特殊的变量:

VUE_APP_*

见上;

NODE_ENV

会是 “development”, “production” 或 “test” 中的一个。具体的值取决于应用运行的模式。

BASE_URL

会和 vue.config.js 中的 publicPath 选项相符,即应用会部署到的基础路径。

所有解析出来的环境变量都可以在 public/index.html 中以 HTML 插值中介绍的方式使用。

自定义

# 端口号
port=8888
# 注意:中间和末尾位置不能有空格

应用

1、版本信息;

注意:在 vue.config.js 文件中计算环境变量。它们仍然需要以 VUE_APP_ 前缀开头。

process.env.VUE_APP_VERSION = require('./package.json').version

module.exports = {
  // config
}

只在本地有效的变量

场景:有时可能有些不应该提交到代码库中的变量,尤其是当项目托管托管在公共仓库时。

解决:应该使用一个 .env.local 文件取而代之。

本地环境文件默认会被忽略,且出现在 .gitignore 中。

.local 也可加在指定模式的环境文件上,比如 .env.development.local 将会在 development 模式下被载入,且被 git 忽略。

(vue-cli 中 git 忽略,普通的还是不会忽略)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue实现裁切图片功能

    Vue实现裁切图片功能

    这篇文章主要为大家详细介绍了Vue实现裁切图片功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue中process.env的具体使用

    vue中process.env的具体使用

    本文主要介绍了vue中process.env的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 详解关于Vuex的action传入多个参数的问题

    详解关于Vuex的action传入多个参数的问题

    这篇文章主要介绍了详解关于Vuex的action传入多个参数的问题,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 使用vuex存储用户信息到localStorage的实例

    使用vuex存储用户信息到localStorage的实例

    今天小编就为大家分享一篇使用vuex存储用户信息到localStorage的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • vue3 ElementUI 日期禁选当日前当日后三天后的实现代码

    vue3 ElementUI 日期禁选当日前当日后三天后的实现代码

    这篇文章主要介绍了vue3 ElementUI 日期禁选当日前当日后三天后的实现代码,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Vue 设置axios请求格式为form-data的操作步骤

    Vue 设置axios请求格式为form-data的操作步骤

    今天小编就为大家分享一篇Vue 设置axios请求格式为form-data的操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Vue实战教程之仿肯德基宅急送App

    Vue实战教程之仿肯德基宅急送App

    这篇文章主要介绍了Vue实战教程之仿肯德基宅急送App,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • Vue3中使用ref标签对组件进行操作方法

    Vue3中使用ref标签对组件进行操作方法

    这篇文章主要介绍了Vue3中使用ref标签对组件进行操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • 详解Vue中的keep-alive

    详解Vue中的keep-alive

    这篇文章主要为大家介绍了Vue中的keep-alive,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • 解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题

    解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题

    这篇文章主要介绍了解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论