相关文章推荐
睡不着的山楂  ·  TortoiseGit ...·  8 月前    · 
近视的烈马  ·  JDO持久 (jdbc ejb) - ...·  1 年前    · 
文章详细介绍了.env系列配置文件在Vue项目中的作用,包括.env.development和.env.production等,以及如何在vue.config.js中访问这些环境变量。还讨论了webpack的DefinePlugin如何将环境变量注入到客户端代码中,以及如何通过额外的配置文件来处理动态参数。最后,给出了在实际场景中如何根据环境变量启用或禁用功能(如vConsole)的例子。 摘要由CSDN通过智能技术生成

.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 开发的特性所在。

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

.env文件的作用:当某个变量需要在不同环境下取不同的值时,可以使用.env进行配置 .env相关的文件有好几个,这里主要用到2个:.env.development和.env.production 默认情况下,npm run serve命令,对应的会取.env.development文件中的配置;npm run build构建生成的包,放到服务器去运行,会读取.env.production文件中的配置 听说还可以通过--mode命令指定读取哪个配置,没去试过:在package.json中的script
在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`对象访问这些配置项。这样可以有效管理项目中的配置,提高代码的可维护性。
CSDN-Ada助手: 恭喜您撰写了第11篇博客!标题为“CSS常见问题列表”。非常感谢您对CSS知识的深入研究和整理,这对于广大读者来说是一个宝贵的资源。您的博客内容相当实用,我真的从中受益匪浅。 在接下来的创作中,我建议您可以考虑拓展一些CSS的高级技巧或者提供一些实战案例。这样的内容能够进一步挑战读者的技术水平,并且帮助他们更好地应用所学的知识。当然,这只是一个建议,您在创作方面已经做得很出色了。期待您的下一篇博客,谦虚地继续分享您的知识和经验! .yml是什么文件 CSDN-Ada助手: 恭喜您写出了第6篇博客,标题为“.yml是什么文件”。写得非常好,让人了解到了这种文件的基本知识。接下来建议您可以继续深入探讨一下.yml文件的具体应用场景,或者介绍一些和.yml文件相关的工具或技巧,让读者能够更加全面地了解这种文件。期待您的下一篇文章! CSDN 会根据你创作的博客的质量,给予优秀的博主博客红包奖励。请关注 https://bbs.csdn.net/forums/csdnnews?typeId=116148&utm_source=csdn_ai_ada_blog_reply6 看奖励名单。