3
votes

Laravel 5.8. Comment utiliser la variable du fichier .env dans webpack.mix.js

J'ai fait ce qui suit dans un fichier .env: APP_ENV = production MIX_APP_ENV = "$ {APP_ENV}"

Dans le fichier webpack.mix.js: const APP_ENV = process.env.MIX_APP_ENV;

En utilisant l'opérateur if else, j'ai vérifié que rien n'était assigné à la variable APP_ENV. Je dois faire ce qui suit - selon l'environnement, compiler les fichiers sass et js dans un dossier spécifique.

J'essaye de faire ce qui suit, mais rien ne fonctionne:

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();
}


2 commentaires

Votre fichier .env n'est pas chargé dans votre environnement, mais la bibliothèque PHP dotenv utilisée par Laravel recherche le fichier .env et fait les valeurs disponible via l'assistant env lors de l'exécution - permettant aux variables d'environnement de remplacer les valeurs spécifiées par .env . Cela signifie qu'en dehors de PHP, vous devez utiliser une bibliothèque équivalente, par exemple: npmjs.com/ package / dotenv-webpack ou npmjs.com/package/dotenv


dotenv est une dépendance de laravel-mix


3 Réponses :


0
votes

Vous ne pouvez pas l'utiliser comme ça car vous êtes dans un fichier JS et JS n'a pas besoin d'y accéder. Vous pouvez installer avec npm le dotenv npm install dotenv --save et l'utiliser comme ceci: 'require (' dotenv '). Load ();' dans votre fichier de mixage et maintenant vous pouvez le faire:

    if (process.env.NODE_ENV !== 'production') {
       // code
    }


3 commentaires

Mais j'ai besoin de lire les données du fichier .env, pas du package.json


D'où vient la variable NODE_ENV?


Bien sûr, en installant le package dotenv , vous le lirez. Le package est lu automatiquement à partir de la racine. NODE_ENV est une variable statique



3
votes

Il n'était pas nécessaire de créer une variable intermédiaire MIX_APP_ENV dans le fichier .env. Le code suivant fonctionne:

require('dotenv').config();
const env = process.env.APP_ENV;


0 commentaires

0
votes

Je me rends compte que c'est une vieille question, mais la solution la plus simple (pour faire fonctionner votre code) est de changer ...

J'ai fait ce qui suit dans le fichier .env: APP_ENV = production MIX_APP_ENV = "$ {APP_ENV}"

..à ..

APP_ENV = production MIX_APP_ENV = production

(votre webpack.mix.js ne pourra pas convertir "$ {APP_ENV}" en "production")


0 commentaires