#laravel #webpack #environment-variables
#laravel #webpack #переменные среды
Вопрос:
Я сделал следующее в файле .env: APP_ENV=производственный MIX_APP_ENV=»${APP_ENV}»
В webpack.mix.js файл: const APP_ENV = process.env.MIX_APP_ENV;
Используя оператор if else, я проверил, что переменной APP_ENV ничего не было присвоено. Мне нужно сделать следующее — в зависимости от среды, скомпилировать файлы sass и js в определенную папку.
Я пытаюсь сделать следующее, но ничего не работает:
const APP_ENV = process.env.MIX_APP_ENV;
if (APP_ENV == 'dev' || APP_ENV == 'production') {
mix
.js('resources/js/app.js', 'js')
.sass('resources/sass/app.scss', 'css')
.version();
} else {
mix
.setPublicPath('public/build')
.setResourceRoot('/build/')
.js('resources/js/app.js', 'js')
.sass('resources/sass/app.scss', 'css')
.version();
}
Комментарии:
1. Ваш
.env
файл не загружен в вашу среду, скорееdotenv
библиотека PHP, используемая Laravel, ищет.env
файл и делает значения доступными черезenv
помощник во время выполнения, позволяя переменным среды переопределять.env
указанные значения. Это означает, что за пределами PHP вам нужно было бы использовать эквивалентную библиотеку, например: npmjs.com/package/dotenv-webpack или npmjs.com/package/dotenv2.
dotenv
является ли зависимостьlaravel-mix
Ответ №1:
Не было необходимости создавать промежуточную переменную MIX_APP_ENV в файле .env. Следующий код работает:
require('dotenv').config();
const env = process.env.APP_ENV;
Ответ №2:
Вы не можете использовать ее таким образом, потому что вы находитесь в JS
файле и JS не имеет к нему доступа. Вы можете установить с помощью npm
dotenv npm install dotenv --save
и использовать его следующим образом: ‘require(‘dotenv’).load();’ внутри вашего файла mix, и теперь вы можете это сделать :
if (process.env.NODE_ENV !== 'production') {
// code
}
Комментарии:
1. Но мне нужно прочитать данные из файла .env, а не из package.json
2. Откуда берется переменная NODE_ENV?
3. Конечно, установив пакет
dotenv
, вы его прочитаете. Пакет автоматически считывается из root.NODE_ENV
является статической переменной
Ответ №3:
Я понимаю, что это старый вопрос, но самое простое исправление (чтобы заставить ваш код работать) — это изменить…
Я сделал следующее в файле .env: APP_ENV=производственный MIX_APP_ENV=»${APP_ENV}»
..кому..
APP_ENV=production MIX_APP_ENV=production
(ваш webpack.mix.js не удастся преобразовать «$ {APP_ENV}» в «production»)