Laravel 5.8. Как использовать переменную из файла .env в webpack.mix.js

#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/dotenv

2. 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»)