.env 文件

.env 文件配置 文件说明

.env:全局默认配置文件,无论什么环境都会加载合并。
.env.development:开发环境的配置文件
.env.production:生产环境的配置文件
.env.[mode]: 只在指定的模式中被载入
.env.local: 在所有的环境中被载入,但会被 git 忽略
.env.[mode].local : 只在指定的模式中被载入,但会被 git 忽略

例:

  • .env.[mode]
    比如 .env.stage该文件表明其只在 stage 环境下被加载
    在这个文件中,我们可以配置如下键值对的变量:
NODE_ENV=stage
VUE_APP_TITLE=stage mode

在 vue.config.js 中访问这些变量呢?很简单,使用 process.env.[name] 进行访问就可以了,比如:

console.log(process.env.NODE_ENV); // development(在终端输出)

因为 vue-cli-service serve 命令默认设置的环境是 development,你需要修改 package.json 中的 serve 脚本的命令为:

"scripts": {
"serve": "vue-cli-service serve --mode stage",
}

--mode stage 其实就是修改了 webpack 4 中的 mode 配置项为 stage,同时其会读取对应 .env.[model] 文件下的配置,如果没找到对应配置文件,其会使用默认环境 development,同样 vue-cli-service build 会使用默认环境 production。

  • .env
    再创建一个 .env的文件,再次配置重复的变量,但是值不同,如:
NODE_ENV=staging
VUE_APP_TITLE=staging mode
VUE_APP_NAME=project

.env 文件会被所有环境加载,即公共配置,那么最终我们运行 vue-cli-service serve 打印出来的是哪个呢?答案是 stage

如果是 .env.stage.local 文件中配置成上方这样,答案便是 staging
.env.[mode].local 会覆盖 .env.[mode] 下的相同配置。同理 .env.local 会覆盖 .env 下的相同配置。

相同配置项的权重:

.env.[mode].local > .env.[mode] > .env.local > .env

除了相同配置项权重大的覆盖小的,不同配置项它们会进行合并操作

环境注入

ue 的前端代码中打印出的 process.env 与 vue.config.js 中输出的可能是不一样的,这需要普及一个知识点:webpack 通过 DefinePlugin 内置插件将 process.env 注入到客户端代码中。

// webpack 配置
{
...
	plugins: [
		new webpack.DefinePlugin({
			'process.env': {
			NODE_ENV: JSON.stringify(process.env.NODE_ENV)
			}
		}),
	],
...
}

由于 vue-cli 3.x 封装的 webpack 配置中已经帮我们完成了这个功能,所以我们可以直接在客户端代码中打印出 process.env 的值,该对象可以包含多个键值对,也就是说可以注入多个值,但是经过 CLI 封装后仅支持注入环境配置文件中以 VUE_APP_ 开头的变量,而 NODE_ENV 和 BASE_URL 这两个特殊变量除外。
比如我们在环境中配置

NODE_ENV=stage2
VUE_APP_TITLE=stage mode2
NAME=vue

尝试在 vue.config.js 中打印 process.env,终端输出:

{
...
npm_config_ignore_scripts: '',
npm_config_version_git_sign: '',
npm_config_ignore_optional: '',
npm_config_init_version: '1.0.0',
npm_package_dependencies_vue_router: '^3.0.1',
npm_config_version_tag_prefix: 'v',
npm_node_execpath: '/usr/local/bin/node',
NODE_ENV: 'stage2',
VUE_APP_TITLE: 'stage mode2',
NAME: 'vue',
BABEL_ENV: 'development',
...
}

除了我们环境配置中的变量外还包含了很多 npm 的信息,但是我们在入口文件 main.js 中打印会发现输出:

{
"BASE_URL": "/vue/",
"NODE_ENV": "stage2",
"VUE_APP_TITLE": "stage mode2"
}

可见注入时过滤调了非 VUE_APP_ 开头的变量
其中多出的 BASE_URL 为你在 vue.config.js 设置的值,默认为 /,其在环境配置文件中设置无效。

额外配置

.env 配置文件中的参数目前只支持静态值,无法使用动态参数,在某些情况下无法实现特定需求,这时候我们可以在根目录下新建 config 文件夹用于存放一些额外的配置文件。

/* 配置文件 index.js */
// 公共变量
const com = {
IP: JSON.stringify('xxx')
};
module.exports = {
// 开发环境变量
dev: {
	env: {
		TYPE: JSON.stringify('dev'),
		...com
	}
},
// 生产环境变量
build: {
	env: {
		TYPE: JSON.stringify('prod'),
		...com
	}
}
}

vue.config.js 里注入这些变量

/* vue.config.js */
const configs = require('./config');
// 用于做相应的 merge 处理
const merge = require('webpack-merge');
// 根据环境判断使用哪份配置
const cfg = process.env.NODE_ENV === 'production' ? configs.build.env : configs.dev.env;
module.exports = {
...
chainWebpack: config => {
config.plugin('define')
.tap(args => {
let name = 'process.env';
// 使用 merge 保证原始值不变
args[0][name] = merge(args[0][name], cfg);
return args
})
},
...
}

最后在客户端成功打印出包含动态配置的对象:

{
"NODE_ENV": "stage2",
"VUE_APP_TITLE": "stage mode2",
"BASE_URL": "/vue/",
"TYPE": "dev",
"IP": "xxx"
}

实际场景

实际场景: 比如在非线上环境我们可以给自己的移动端项目开启 vConsole 调试,但是在线上环境肯定不需要开启这一功能,我们可以在入口文件中进行设置,代码如下:

/* main.js */
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
// 如果是非线上环境,加载 VConsole
if (process.env.NODE_ENV !== 'production') {
var VConsole = require('vconsole/dist/vconsole.min.js');
var vConsole = new VConsole();
}
 
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')

配置中的 BASE_URL 来设置路由的 base 参数

/* router.js */
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'
import About from './views/About.vue'
Vue.use(Router)
let base = `${process.env.BASE_URL}`; // 获取二级目录
export default new Router({
	mode: 'history',
	base: base, // 设置 base 值
	routes: [
		{
			path: '/',
			name: 'home',
			component: Home
		},
		{
			path: '/about',
			name: 'about',
			component: About
		}
	]
})

每一个环境变量你都可以用于项目的一些地方,它提供给了我们一种全局的可访问形式,也是基于 Node 开发的特性所在。

结语
环境的配置和管理对于项目的构建起到了至关重要的作用,通过给项目配置不同的环境不仅可以增加开发的灵活性、提高程序的拓展性,同时也有助于帮助我们去了解并分析项目在不同环境下的运行机制,建立全局观念。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在Vue项目中,.env文件是用来配置环境变量的文件。它的作用是在不同的环境之间设置不同的配置参数,方便在开发、测试和生产环境中进行不同的配置。 首先,我们需要在Vue项目的根目录下创建一个.env文件文件名必须以.env开头,可以结合环境进行命名,比如.env.development是用于开发环境的配置文件,.env.production是用于生产环境的配置文件。 在.env文件中,我们可以定义各种各样的环境变量,如API接口地址、端口号、静态资源地址等。比如,我们可以在.env.development文件中定义一个名为VUE_APP_API_URL的变量,它的值可以是开发环境的API地址。 在Vue项目的代码中,我们可以使用process.env来获取定义在.env文件中的环境变量。例如,我们可以使用process.env.VUE_APP_API_URL来获取API地址。这样,在不同的环境下,我们只需要在对应的.env文件中修改变量的值即可。 需要注意的是,以VUE_APP开头的变量会被自动载入到项目的process.env中,所以我们只需要在代码中使用process.env.VUE_APP开头的变量即可,无需手动导入。 另外,我们还可以创建不同的.env文件,如.env.staging用于测试环境的配置。这样,我们可以根据当前所处的不同环境,自动读取相应的.env文件中的配置参数,而无需手动切换配置文件。 总的来说,通过在Vue项目中使用.env文件配置环境变量,可以方便我们在不同的环境中进行灵活的配置,提高开发效率和项目的可维护性。 ### 回答2: 在Vue项目中,.env文件是用来配置环境变量的。通过使用.env文件,我们可以在不同的环境中设置不同的变量值,从而方便我们在开发、测试和生产环境中切换。 首先,我们需要在Vue项目的根目录下创建一个名为.env文件。在这个文件中,我们可以设置不同的变量,每个变量都有一个键值对,以等号分隔。例如,我们可以设置一个名为VUE_APP_API_URL的变量,并为其赋值为后端API的URL地址: VUE_APP_API_URL=http://api.example.com 在Vue项目中,我们可以通过使用process.env来访问.env文件中设置的变量。以VUE_APP_API_URL为例,在我们的代码中可以这样使用: const apiUrl = process.env.VUE_APP_API_URL 需要注意的是,我们需要在变量名前面加上前缀VUE_APP_,以确保这些变量能够被识别并使用。这是因为Vue CLI在构建过程中只注入以VUE_APP_前缀命名的变量。 另外,.env文件还支持在不同的环境中设置不同的值。我们可以创建三个不同的.env文件来分别配置开发、测试和生产环境中的变量。在Vue项目中,默认会根据我们的打包指令自动寻找和使用对应的.env文件。 例如,我们可以创建.env.development、.env.test和.env.production文件,并在各自的文件中设置不同的变量值。在开发过程中,我们使用npm run serve来运行开发服务器,此时会自动加载.env.development文件中的变量。同理,在打包生产环境时,会自动加载.env.production文件中的变量。 通过使用.env文件,我们可以轻松地配置Vue项目中的环境变量,从而实现在不同环境中的灵活切换和配置。这对于处理API地址、密钥等敏感信息非常有用。同时,它也方便了团队成员之间的协作和代码的复用。 ### 回答3: 在Vue项目中,可以使用`.env`文件进行配置。`.env`文件是用来设置环境变量的文件。 首先,在项目根目录下创建`.env`文件,并在其中添加需要的配置。`.env`文件是一个键值对的文件,每行为一个配置项,格式为`键=值`。 例如,我们可以在`.env`文件中设置以下配置: ``` VUE_APP_API_URL=http://api.example.com VUE_APP_DEBUG=true VUE_APP_VERSION=1.0.0 ``` 其中,`VUE_APP_API_URL`是一个API的URL地址,`VUE_APP_DEBUG`是一个调试标志,`VUE_APP_VERSION`是项目的版本号。 在Vue项目中,可以通过`process.env`对象来访问这些配置项。例如,可以在代码中使用`process.env.VUE_APP_API_URL`来获取API的URL地址。 需要注意的是,以`VUE_APP_`开头的配置项会被自动注入到项目中,其他以`VUE_APP_`开头的配置项则不会被注入到项目中。这是为了防止敏感信息被意外暴露在项目中。 此外,`.env`文件还支持不同的环境配置。例如,可以创建`.env.development`文件来设置开发环境的配置项,`.env.production`文件来设置生产环境的配置项。根据不同的环境,Vue会自动加载相应的配置文件。 总结来说,`.env`文件提供了一种简单方便的方式来配置Vue项目的环境变量,可以根据需要设置不同的配置项,并通过`process.env`对象访问这些配置项。这样可以有效管理项目中的配置,提高代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值