Передайте аргумент (командную строку) для использования файлом .env. [Mode] во время сборки в Vue.js - PullRequest
0 голосов
/ 18 февраля 2019

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

.env.production файл:

VUE_APP_CLIENT_ID=00-should-be-using-what-was-passed-by-command-00

Файл Docker:

#Inside my docker file
RUN npm run build #I need to pass the argument here

Мои сценарии package.json:

"scripts": {
    "serve": "vue-cli-service serve --mode development",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint",
    "test:unit": "vue-cli-service test:unit"
 },

Почему:
OBS: я использую webpack, он уже настроен с помощью vue-cli
Я знаю, что могу настроить различные файлы и режимы .env, но мне нужнобыть в состоянии «внедрить» или иметь динамическую переменную в моем файле .env.production, так как иногда я создаю для производства для разных серверов.
Я мог бы создать еще больше файлов, и это решило бы мою проблему, но я хочу что-то более практичноечто то.

Контекст:
Я использую Docker и Auth0, и я на самом деле использую переменную VUE_APP_CLIENT_ID env, которая определяет, будет ли она запрашивать запрос, у меня уже есть два разных VUE_APP_CLIENT_IDОпределения (одно на .env.development одно на .env.production) дело в том, что мне нужно развернуть одно и то же только на двух разных серверах, каждый из которых нацеливается на разные client_id на производстве.

Инструменты:
Docker, docker-compose, Vue.js, vue-cli 3, npm

ОС:
Ubuntu 16.04

1 Ответ

0 голосов
/ 18 февраля 2019
  1. Solution-1:

Поскольку process.env предоставляет все переменные среды, вы можете запустить

export MYCUSTOMENV=foo && npm run build

ииспользуйте process.env.MYCUSTOMENV в любом месте.

From vue doc: только переменные, начинающиеся с VUE_APP_, будут статически встроены в клиентский пакет.

Solution-2

Используйте process.argv, чтобы получить все аргументы и отфильтровать то, что вы хотите:

npm run build a=b foo

process.argv.forEach((val, index) => {
  console.log(`${index}: ${val}`);
});

output:

0: /usr/local/bin/node
1: /Users/tzp/xxx/vue-cli-service
2: build
3: a=b
4: foo
...