我使用的是Vue和webpack,还有一个环境变量,告诉webpack为生产或开发而构建.

This is working:

NODE_ENV=production webpack

console.log(process.env)

但是,你可以根据生产或开发模式使用不同的.env文件来更改应用程序中的变量.

.env

VUE_APP_ROOT=http://localhost:8000/
VUE_APP_BASE_URL=http://localhost:8000/api/

.env.prod

VUE_APP_ROOT=http://realaddress/
VUE_APP_BASE_URL=http://realaddress/api/

但我不清楚这些是怎么回事.环境文件被访问了吗?很明显,当你使用vue-cli时,这是有效的,但在我的应用程序中,这会记录未定义的内容:

console.log("environment variables")
console.log(process.env.VUE_APP_ROOT)
console.log(process.env.VUE_APP_BASE_URL)

如果没有vue-cli,如何根据生产模式访问不同的.env个文件?

推荐答案

你可以使用dotenv插件.

// webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

要基于环境加载文件,您可以利用process.env.NODE_ENV:

// webpack.config.js
const Dotenv = require('dotenv-webpack');
const env = process.env.NODE_ENV;

module.exports = {
  ...
  plugins: [
    new Dotenv({
      path: `./.env.${env === "production" ? "prd" : "dev"}`,
    })
  ]
  ...
};

您可以看到vue cli在这repo中做了类似的事情

Vue.js相关问答推荐

在 VueJS 中,将变量而不是组件的字符串名称传递给动态组件的 :is 属性不起作用

在 dom 内移动 Vue 组件?

在重复内容区域中添加

VuetifyJS,outer-link 未显示为光标

在 vuejs 中显示两个组件,但只显示一个,为什么?

在 vue 3 中使用 vue-chartjs:createElement 不是函数

Vuejs中的条件a href

根据 URL 有条件地隐藏视图组件

如何像 React 中的 {...props} 一样在 Vue 中解构 props?

VueJS + Typescript:类型上不存在属性

在渲染组件之前从 api 获取数据

POST 文件连同表单数据 Vue + axios

如何将 mapActions 与 vue + Typescript 类组件一起使用?

Vue:从 Vue 实例更新组件数据

我可以使用 vue.js v-if 来判断值是否存在于数组中

如何将 v-if 与 Vue.js 中的值进行比较

Vue更改宽度和内容

如何在 Vue.js 中获取组件元素的 offsetHeight?

vue 在 v-model 之后执行 @click

根据nuxt中的url参数动态加载组件