Как проверить, находится ли Vue в режиме разработки?

Когда я запускаю приложение 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

Итак, теперь я хочу проверить, находится ли Vue в разработке из моих шаблонов, используя:

console.log("mode is " + process.env.NODE_ENV)

Но только журналы undefined Есть ли другой способ найти NODE_ENV в Vue?

В моей конфигурации 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
    })
  ])
}

Возможно, релевантно: я использую typescript, поэтому я включил объявление этого типа:

declare var process: {
    env: {
        NODE_ENV: string
    }
}

Ответ 1

Webpack используется практически для всех моих проектов Vue, поэтому я проверяю, присутствует ли webpackHotUpdate.

 if (webpackHotUpdate) {
      console.log('In Dev Mode');
 }

Он присутствует в объекте window, если работает веб-сервер devp.

Ответ 2

Если вы начали с vue-cli (по умолчанию webpack), тогда это должно работать:

  connection: process.env.NODE_ENV === 'development'
    ? 'ws://localhost:5000'
    : 'wss://myawsomeproject.org'

Ответ 3

Абсолютно самое простое решение - проверить для window.location компонент Vue. Это будет выглядеть примерно так:

if (window.location.href === 'YOUR DEVELOPMENT URL') {
    //preset form values here
}

Ответ 4

Попробуйте использовать .env файлы.

Вы можете указать переменные env, поместив следующие файлы в корень вашего проекта:

.env # загружается во всех случаях .env.local # загружается во всех случаях, игнорируется git.env. [mode] # загружается только в указанном режиме .env. [mode].local # загружается только в указанном режиме, игнорируется git

плюс

Env Загрузка Приоритеты

Файл env для определенного режима (например,.env.production) будет иметь более высокий приоритет, чем общий (например,.env).

Документы: https://cli.vuejs.org/guide/mode-and-env.html#environment-variables

Ответ 5

Для моего конкретного случая, когда я использую pug и просто хотел условно добавить некоторые элементы в компонент, я установил options.data для pug-plain-loader в моем webpack.config.js так, чтобы загрузчик выглядел следующим образом:

{
  resourceQuery: /^\?vue/,
  use: [
    {
      loader: 'pug-plain-loader',
      options: {
          // Use whatever you'd use to detect mode in the webpack config
          data: { mode: process.env['PRODUCTION'] ? 'production' : 'development' },
        },
      },
    ],
  },
}

Вот полный webpack.config.js который я использую: https://github.com/SuperuserLabs/thankful/blob/5913d9d0bb02e6d2f3b88c541477dc557caa4148/webpack.config.js#L76-L88

После чего я мог сделать:

if mode === 'development'
  | Only shown in development mode

В общем случае это оказалось сложнее, чем я ожидал. Хотя кто-то хороший в Webpack мог бы сделать это довольно легко.

Ответ 6

Я знаю, что это старый вопрос, но новым пользователям VueJS может быть полезно узнать решение, которое я нашел в текущей версии Vue (3.11):

При работе в режиме разработки свойство Vue.config.devtools имеет значение true, а в производственном режиме - false!

Ответ 7

Использование файла .env является распространенным способом задания переменных среды, используемых во многих стеках. Имеет смысл использовать его в Vue, а не пытаться изобретать велосипед.

Здесь небольшой тест, который покажет, какие условия и варианты у вас есть.

Создайте свой проект с помощью этой команды:

vue-cli-service build

.env file:

#.env
NODE_ENV=development
DDD=development
VUE_APP_NODE_ENV=development

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
},

NODE_ENV устанавливается vue-cli-service. Вы можете иметь несколько файлов .env и использовать vue-cli-service build --mode staging для запуска различных конфигураций.

Во время сборки используются переменные окружения, а в коде компонента используются переменные env на стороне клиента. Поэтому вы не можете использовать что-то вроде DDD в своем коде на стороне клиента, потому что Vue будет игнорировать это.

Вы можете создать собственную переменную env с префиксом VUE_APP_ и использовать ее в своем клиентском коде для любых проверок. Документы ref. VUE_APP_NODE_ENV будет отлично работать в нашем тесте.

Примечание

Парсинг вашего URL не лучший выбор. Если вы используете что-то подобное window.location.href.indexOf("localhost"), оно не будет работать для 127.0.0.1. Несколько раз мне приходилось запускать проект по полному доменному имени, и эта проверка для него также не работает.

Ответ 8

Я обычно использую:

if(window.location.href.indexOf("localhost") >= 0) {
  // Development mode    
}

Или же:

if(window.location.href.indexOf("localhost") < 0) {
  // Production mode    
}

Просто выполняя поиск части URL-адреса разработки, например localhost вам не нужно быть настолько конкретным с остальной частью адреса. Это работает в любом месте вашего проекта, в отличие от process.env.NODE_ENV который, например, не будет работать в файле index.html.