如何检查Vue是否处于开发模式?

Kok*_*oko 17 typescript webpack vue.js

当我运行我的Vue应用程序时,控制台显示:

You are running Vue in development mode.
Make sure to turn on production mode when deploying for production.
See more tips at https://vuejs.org/guide/deployment.html
Run Code Online (Sandbox Code Playgroud)

所以现在我想通过使用以下方法检查Vue是否在我的模板中进行开发:

console.log("mode is " + process.env.NODE_ENV)
Run Code Online (Sandbox Code Playgroud)

但是那只记录undefined 是否有不同的方法在Vue中找到NODE_ENV?

我的webpack配置有这个部分:

if (process.env.NODE_ENV === 'production') {
  module.exports.devtool = '#source-map'
  // http://vue-loader.vuejs.org/en/workflow/production.html
  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"production"'
      }
    }),
    new webpack.optimize.UglifyJsPlugin({
      sourceMap: true,
      compress: {
        warnings: false
      }
    }),
    new webpack.LoaderOptionsPlugin({
      minimize: true
    })
  ])
}
Run Code Online (Sandbox Code Playgroud)

也许相关:我使用的是typescript,所以我包含了这种类型的声明:

declare var process: {
    env: {
        NODE_ENV: string
    }
}
Run Code Online (Sandbox Code Playgroud)

use*_*887 17

我知道这是一个老问题,但了解我在当前版本的 Vue (3.11) 中找到的这个解决方案可能对新的 VueJS 用户有所帮助:

在开发模式下运行时,属性Vue.config.devtoolstrue,在生产模式下是false


Gen*_*ano 16

Webpack几乎用于我的所有Vue项目,因此我检查是否webpackHotUpdate存在.

 if (webpackHotUpdate) {
      console.log('In Dev Mode');
 }
Run Code Online (Sandbox Code Playgroud)

window如果webpack dev服务器正在运行,它将出现在对象中.


Art*_*nov 11

对于Vue 3Vite项目,请从项目中的任何js或文件中使用它:vue

console.log(import.meta.env.DEV)
console.log(import.meta.env.PROD)
Run Code Online (Sandbox Code Playgroud)

返回boolean value,具体取决于您的环境。


sr9*_*yar 9

使用.env文件是设置许多堆栈中使用的环境变量的常用方法。在 Vue 中使用它是有意义的,而不是尝试重新发明轮子。

这是一个小测试,它将显示您拥有哪些条件和选项。

使用此命令构建您的项目:

vue-cli-service build
Run Code Online (Sandbox Code Playgroud)

.env 文件:

#.env
NODE_ENV=development
DDD=development
VUE_APP_NODE_ENV=development
Run Code Online (Sandbox Code Playgroud)

Vue组件:

mounted() {
    console.log(process.env.NODE_ENV); // OUTPUT: production
    console.log(process.env.DDD); // OUTPUT: undefined
    console.log(process.env.VUE_APP_NODE_ENV); // OUTPUT: development
},
Run Code Online (Sandbox Code Playgroud)

NODE_ENV由设置vue-cli-service。您可以拥有多个.env文件并用于vue-cli-service build --mode staging运行不同的配置

构建期间使用了环境变量,组件代码中使用了客户端环境变量。DDD所以你不能在客户端代码中使用类似的东西,因为 Vue 会忽略它。

您可以创建自己的以 VUE_APP_ 为前缀的环境变量,并在客户端代码中使用它们进行任何检查。文档参考VUE_APP_NODE_ENV在我们的测试中会工作得很好。

笔记

解析您的网址并不是最好的选择。如果你使用这样的东西window.location.href.indexOf("localhost"),它将不起作用127.0.0.1。有几次我不得不在 FQDN 上运行该项目,并且此检查也不起作用。


Imr*_*e_G 8

绝对最简单的解决方案是从您的 Vue 组件中检查 window.location。这看起来像这样:

if (window.location.href === 'YOUR DEVELOPMENT URL') {
    //preset form values here
}
Run Code Online (Sandbox Code Playgroud)

  • 我想这有效!不确定它是否完全回答了我的问题,但它仍然是一个解决方案:) (2认同)

Tho*_*mas 5

如果您从vue-cli(默认Webpack)开始,那么这应该可以工作:

  connection: process.env.NODE_ENV === 'development'
    ? 'ws://localhost:5000'
    : 'wss://myawsomeproject.org'
Run Code Online (Sandbox Code Playgroud)

  • 是的,但是 process.env.NODE_ENV 没有定义......这就是问题所在。 (2认同)