Невозможно использовать переменную process.env для установки псевдонима в веб-пакете. - PullRequest
0 голосов
/ 07 февраля 2019

В build \ webpack.base.conf.js это работает:

resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'api-client': process.env.VUE_APP_API_CLIENT === 'mock'
            ? resolve('src/api/mock')
            : resolve('src/api/server')
    }
  },

, а это не так:

resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js',
      '@': resolve('src'),
      'api-client': resolve('src/api/' + process.env.VUE_APP_API_CLIENT)
    }
  },

Ошибка при запуске npm run dev равна

This dependency was not found:
* api-client in ./src/store/index.js

Вот config\prod.env.js:

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  VUE_APP_API_CLIENT: '"server"'
}

и config\dev.env.js

'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')

module.exports = merge(prodEnv, {
  NODE_ENV: '"development"',
  VUE_APP_API_CLIENT: '"mock"'
})

Как использовать переменную среды, как в первом примере кода?

Спасибо.

1 Ответ

0 голосов
/ 07 февраля 2019

Кажется, что config/dev.env.js и config/prod.env.js загружаются в webpack.dev.conf.js и webpack.prod.conf.js соответственно, после загрузки webpack.base.conf, поэтому объявленные там переменные env неизвестны на момент установкипсевдонимы в webpack.base.conf.Как ни странно, process.env.NODE_ENV не является неизвестным в этом месте, поэтому я в итоге использовал его:

const isProduction = process.env.NODE_ENV === 'production'

тогда псевдонимы объявляются так:

alias: {
  'vue$': 'vue/dist/vue.esm.js',
  '@': resolve('src'),
  'api-client': resolve(`src/api/${isProduction ? 'server' : 'mock'}`)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...