Использование переменных среды с Vue.js - PullRequest
0 голосов
/ 13 июня 2018

Я читаю официальные документы и не могу ничего найти по переменным среды.Очевидно, есть некоторые проекты сообщества, которые поддерживают переменные среды, но это может быть излишним для меня.Поэтому мне было интересно, есть ли что-то простое из коробки, которое изначально работает при работе над проектом, уже созданным с помощью Vue CLI.

Например, я вижу, что если я сделаю следующее, правильная среда выводит значениеэто уже настройка?

mounted() {
  console.log(process.env.ROOT_API)
}

Я новичок в переменных env и Node.

К вашему сведению, используя Vue 3.0 beta.

Ответы [ 9 ]

0 голосов
/ 18 июля 2019

В дополнение к предыдущим ответам, если вы хотите получить доступ к переменным VUE_APP_ * env в вашем sass (либо в разделе sass компонента vue, либо в файле scss), то вы можете добавить следующее в свой vue.config.js (который вам может понадобиться создать, если у вас его нет):

let sav = "";
for (let e in process.env) {
    if (/VUE_APP_/i.test(e)) {
        sav += `$${e}: "${process.env[e]}";`;
    }
}

module.exports = {
    css: {
        loaderOptions: {
            sass: {
                data: sav,
            },
        },
    },
}

Кажется, что строка sav добавляется перед каждым файлом sass перед обработкой, что хорошо для переменных.На этом этапе вы также можете импортировать миксины, чтобы сделать их доступными для секции sass каждого компонента vue.

Затем вы можете использовать эти переменные в секции sass файла vue:

<style lang="scss">
.MyDiv {
    margin: 1em 0 0 0;
    background-image: url($VUE_APP_CDN+"/MyImg.png");
}
</style>

или в файле .scss:

.MyDiv {
    margin: 1em 0 0 0;
    background-image: url($VUE_APP_CDN+"/MyImg.png");
}

из https://www.matt -helps.com / post / expose-env-variable-vue-cli-sass /

0 голосов
/ 31 июля 2019

Вот как я отредактировал свой vue.config.js, чтобы я мог выставить NODE_ENV для внешнего интерфейса (я использую Vue-CLI):

vue.config.js

const webpack = require('webpack');

// options: https://github.com/vuejs/vue-cli/blob/dev/docs/config.md
module.exports = {
    // default baseUrl of '/' won't resolve properly when app js is being served from non-root location
    baseUrl: './',
    outputDir: 'dist',
    configureWebpack: {
        plugins: [
            new webpack.DefinePlugin({
                // allow access to process.env from within the vue app
                'process.env': {
                    NODE_ENV: JSON.stringify(process.env.NODE_ENV)
                }
            })
        ]
    }
};
0 голосов
/ 11 апреля 2019
  1. Создание двух файлов в корневой папке (рядом с package.json) .env и .env.production
  2. Добавление переменных в эти файлы с префиксом VUE_APP_, например: VUE_APP_WHATEVERYOUWANT
  3. serve использует .env и build использует .env.production
  4. В ваших компонентах (vue или js) используйте process.env.VUE_APP_WHATEVERYOUWANT для вызова значения
  5. Не забудьте перезапустить Служить , если он в данный момент работает
  6. Очистить кеш браузера

Убедитесь, что выс использованием vue-cli версии 3 или выше

Для получения дополнительной информации: https://cli.vuejs.org/guide/mode-and-env.html

0 голосов
/ 14 июня 2019

Для тех, кто использует Vue CLI 3 и простую установку через веб-пакет, Ответ Аарона сработал для меня, однако я не был заинтересован в добавлении переменных окружения в мой webpack.config.js, поскольку я хотел его зафиксироватьна GitHub.Вместо этого я установил плагин dotenv-webpack , и это похоже на точную загрузку переменных среды из файла .env в корне проекта без необходимости добавлять VUE_APP_ к переменным среды.

0 голосов
/ 02 марта 2019

В корне вашего проекта создайте файлы своей среды:

  • .env
  • .env.someEnvironment1
  • .env.SomeEnvironment2

Чтобы затем загрузить эти конфиги, вы должны указать окружение через mode, т.е.

npm run serve --mode development //default mode
npm run serve --mode someEnvironment1

В ваших env файлах вы просто объявляете конфигурацию как пары ключ-значение, но если вы 'повторно используя vue 3, вы должны префикс с VUE_APP_:

в вашем .env :

VUE_APP_TITLE=This will get overwritten if more specific available

.env.someEnvironment1:

VUE_APP_TITLE=My App (someEnvironment1)

Затем вы можете использовать это в любом из ваших компонентов с помощью:

myComponent.vue:

<template>
  <div> 
    {{title}}
  </div>
</template>

<script>
export default {
  name: "MyComponent",
  data() {
    return {
      title: process.env.VUE_APP_TITLE
    };
  }
};
</script>

Теперь, если вы запустили приложение без mode, оно покажет «This get get ...», но если вы укажете someEnvironment1 в качестве mode, тогда вы получите заголовок оттуда.

Вы можете создать конфиги, которые «скрыты» от git, добавив .local в ваш файл: .env.someEnvironment1.local - очень полезно, когда у вас есть секреты.

Прочитайте документы для получения дополнительной информации.

0 голосов
/ 18 сентября 2018

Проблема, с которой я столкнулся, заключалась в том, что я использовал простую установку из веб-пакета для VueJS, в которой, похоже, не было папки конфигурации переменных среды.Поэтому я не смог редактировать конфигурационные файлы env.test, development и production.js.Их создание тоже не помогло.

Другие ответы не были достаточно подробными для меня, поэтому я просто "возился" с webpack.config.js.И следующее сработало просто отлично.

Таким образом, чтобы переменные среды работали, внизу файла webpack.config.js должно быть следующее:

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
    })
  ])
}

Исходя из вышеизложенного, в производстве , вы могли бы получить переменную NODE_ENV

mounted() {
  console.log(process.env.NODE_ENV)
}

Теперь могут быть более эффективные способы сделать это, но если вы хотите использовать переменные среды в разработке, вы бы сделали что-тонапример, следующее:

if (process.env.NODE_ENV === 'development') {

  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"development"'
      }
    })
  ]);

} 

Теперь, если вы хотите добавить другие переменные, было бы просто:

if (process.env.NODE_ENV === 'development') {

  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"development"',
        ENDPOINT: '"http://localhost:3000"',
        FOO: "'BAR'"
      }
    })
  ]);
}

Я также должен отметить, что вам, кажется, нужно"'" "двойные кавычки по какой-то причине.

Итак, в разработке , теперь я могу получить доступ к этим переменным окружения:

mounted() {
  console.log(process.env.ENDPOINT)
  console.log(process.env.FOO)
}

Вотвесь webpack.config.js только для некоторого контекста:

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'build.js'
  },
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'vue-style-loader',
          'css-loader'
        ],
      },      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          loaders: {
          }
          // other vue-loader options go here
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },
  resolve: {
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    },
    extensions: ['*', '.js', '.vue', '.json']
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true,
    overlay: true
  },
  performance: {
    hints: false
  },
  devtool: '#eval-source-map'
}

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
    })
  ])
}

if (process.env.NODE_ENV === 'development') {

  module.exports.plugins = (module.exports.plugins || []).concat([
    new webpack.DefinePlugin({
      'process.env': {
        NODE_ENV: '"development"',
        ENDPOINT: '"http://localhost:3000"',
        FOO: "'BAR'"
      }
    })
  ]);

}
0 голосов
/ 11 августа 2018

В vue-cli версии 3:

Существуют опции для файлов .env: либо вы можете использовать .env, либо:

  • .env.test
  • .env.development
  • .env.production

Вы можете использовать пользовательские .env переменные, используя регулярное выражение префикса как /^/ вместо /^VUE_APP_/ в /node_modules/@vue/cli-service/lib/util/resolveClientEnv.js:prefixRE

Это, конечно, не рекомендуется для разработки приложения с открытым исходным кодом в различных режимах, таких как тестирование, разработка и создание файлов .env.Потому что каждый раз, когда вы npm install .., он будет переопределен.

0 голосов
/ 08 августа 2018

Если вы используете Vue cli 3, будут загружены только переменные, начинающиеся с VUE_APP_.

В корне создайте файл .env с:

VUE_APP_ENV_VARIABLE=value

С этим выбудет иметь возможность использовать process.env.VUE_APP_ENV_VARIABLE в вашем проекте (файлы .js и .vue).

Обновление

Согласно @ ali6p, для Vue Cli 3 нет необходимостиустановить зависимость dotenv.

0 голосов
/ 13 июня 2018

Если вы используете vue cli с шаблоном Webpack (конфигурация по умолчанию), вы можете создавать и добавлять переменные среды в файл .env.

Переменные автоматически будут доступны в вашем проекте под process.env.variableName,Загруженные переменные также доступны для всех команд, плагинов и зависимостей vue-cli-service.

У вас есть несколько опций, это из документации переменных и режимов среды :

.env                # loaded in all cases
.env.local          # loaded in all cases, ignored by git
.env.[mode]         # only loaded in specified mode
.env.[mode].local   # only loaded in specified mode, ignored by git

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

VUE_APP_MY_ENV_VARIABLE=value
VUE_APP_ANOTHER_VARIABLE=value

Насколько я понимаю, все, что вам нужно сделать, это создать файл .env и добавить переменные, после чего вы готовы к работе.!:)

Как отмечено в комментарии ниже: Если вы используете Vue cli 3, будут загружены только переменные, которые начинаются с VUE_APP_ .

Не забудьте перезапустить serve , если он в данный момент работает.

...