Объяснение рабочего процесса dotenv и локальных файлов с использованием Vue -cli / webpack / nodenv - PullRequest
0 голосов
/ 25 марта 2020

Я бьюсь головой о стену о том, как это сделать. Я разрабатывал приложение vue -cli, и, очевидно, в мире узлов мы все верим, что существует одна разработка, одна промежуточная и одна производственная среда.

Я пытался сократить как можно больше ручного труда, поэтому я не буду постоянно перемещать файлы, менять конфиги и т. д. c.

У меня всего 5 сред, но 3 среды разработки, которые мне нужны Разберитесь с этой системой, и у меня действительно нет никакого способа сделать это, поэтому мне нужны некоторые рекомендации.

  • 1-е окружение разработчика, localhost: 12345 - я поместил переменные, где он отключает аутентификацию и указывает путь к URL. Если бы это называлось MyLocal для process.env.NODE_ENV, то я мог бы использовать переменные env.mylocal.
  • 2-е окружение разработчика, localhost: 12345 (да, то же самое) - я поместил переменные, где вся моя аутентификация возвращается и я указываю тот же путь URL. Если бы это называлось DevLocal для process.env.NODE_ENV, то я мог бы использовать переменные env.devlocal
  • 3-е окружение разработчика, dev.example.com/newAppLoc/web - я поместил переменные, в которые возвращалась бы вся моя аутентификация и я указываю новый путь URL. Если бы это называлось Разработка для process.env.NODE_ENV, то я мог бы использовать переменные env.development

4-й и 5-й были бы соответственно постановкой и производством.

Если бы у меня был Возможность создания собственной среды имен более 3-х, этого вопроса можно было бы избежать. Потому что все, что мне нужно сделать на этом этапе, это указать, какую среду использовать, и позволить запускать сценарии сборки. Затем в этот момент я могу опубликовать sh весь мой репозиторий, не беспокоясь о том, какие env-файлы отправлять, так как это уже было указано в сборке.

Но так как я могу указать только 3, мне нужна помощь в выяснении этого. Я должен беспокоиться о том, что мои файлы отправляются из-за страха, что один файл переопределит другой конфиг. Мне также нужно беспокоиться о том, чтобы мои файлы отправлялись в репозиторий, который могут быть извлечены другими, и настройки их проекта будут переопределены. На мой взгляд, вся эта схема кажется слишком ненадежной, и я довольно пессимистично настроена к этому строгому и продуманному беспорядку. Тем не менее, я хотел бы знать, какие рабочие процессы, как я вижу, имеют это в более чем 3 средах.

Кроме того, я не могу переопределить значения «разработка», «подготовка» , "производство". Существуют проверки, которые не позволяют вам сравнивать значения с чем-то другим. Это означает, что в вашем webpack.config. js или vue .config. js, если ваш process.env.NODE_ENV имеет значение MyLocal, и вы пытаетесь сравнить его с «MyLocal», оно буквально станет ложным.

Вот сценарии, которые у меня есть в моем пакете. json

"serve": "vue-cli-service serve",
"serve:mylocal": "vue-cli-service serve --mode MyLocal",
"build:mylocal": "vue-cli-service build --mode MyLocal",
"build:devlocal": vue-cli-service build --mode devlocal",
"build:dev": "vue-cli-service build --mode development",
"build:prod": "vue-cli-service build",

Итак:

const isDevBuild = process.env.NODE_ENV === "MyLocal";  // false if process.env.NODE_ENV = MyLocal
const isDevBuild = process.env.NODE_ENV === "production"; // true if process.env.NODE_ENV = production

Я думал:

  • MyLocal будет таким же, как .env.local
  • DevLocal будет таким же, как .env.development.local
  • Разработка будет такой же, как .env.development

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

1 Ответ

0 голосов
/ 26 марта 2020

Поэтому я отказался от попыток найти рабочий процесс для сценария и попытался найти способ грубой силы осуществить идею, которую пытался реализовать sh.

Так что vue -кли нужны те Режимы применения process.env.NODE_ENV и поиска правильных .env файлов. Однако в файле vue .config. js значение process.env.NODE_ENV переопределяется значением по умолчанию команд vue -cli-serve или vue -cli-build. Вот почему он смог выяснить, является ли «производство» или «разработка» истинным, и не имеет никакого другого значения независимо от того, какой режим вы ему задаете.

Поэтому я изменил приведенный выше скрипт на:

"build:mylocal":  set NODE_ENV=MyLocal && "vue-cli-service build --mode MyLocal",
"build:devlocal":  set NODE_ENV=DevLocal && vue-cli-service build --mode Devlocal",

, который дал мне правильные значения, но все еще не работал. Я добавил console.log (process.env.NODE_ENV), и он возвращал мне MyLocal, но:

console.log(process.env.NODE_ENV === "MyLocal")   // still false!!

Это было до тех пор, пока я не сделал JSON .stringify (process.env.NODE_ENV) и обнаружил, что результат был «MyLocal». Видишь это пустое место? Теперь картинка видится на консоли без кавычек. Необходимо заключить в скобки набор NODE_ENV.

Итак, окончательное решение:

"build:MyLocal": "(set NODE_ENV=MyLocal) && vue-cli-service build --mode MyLocal"
"build:DevLocal": "(set NODE_ENV=DevLocal) && vue-cli-service build --mode DevLocal"

Это было немного хакерское решение. Вам нужно явно установить NODE_ENV, чтобы переопределить vue -cli механизм установки NODE_ENV в vue .config. js, и вам все еще нужен аргумент --mode, чтобы использовать функцию vue -cli для выбора файлов среды ,

...