vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue-cli11模式&环境变量

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

作者:fangyinggui

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

模式

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

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

注意

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

vue-cli-service build --mode development

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

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

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

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

环境文件加载优先级

示例: Staging 模式

1、准备环境变量文件

VUE_APP_TITL=My App
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_* 变量外,在应用代码中始终可用的还有 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 忽略,普通的还是不会忽略)

总结

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

您可能感兴趣的文章:
阅读全文