【问题标题】:Laravel 5.8. How use variable of .env file in webpack.mix.js拉拉维尔 5.8。如何在 webpack.mix.js 中使用 .env 文件的变量
【发布时间】:2019-08-07 12:40:28
【问题描述】:

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

【问题讨论】:

  • 你的 .env 文件没有加载到你的环境中,而是 Laravel 使用的 dotenv PHP 库查找 .env 文件并在运行时通过 env 帮助程序使值可用-- 允许环境变量覆盖.env 指定的值。这意味着在 PHP 之外您需要使用等效的库,例如:npmjs.com/package/dotenv-webpacknpmjs.com/package/dotenv
  • dotenvlaravel-mix 的依赖项

标签: laravel webpack environment-variables


【解决方案1】:

你不能那样使用它,因为你在JS 文件中,JS 不必访问它。 您可以使用npm dotenv npm install dotenv --save 安装并像这样使用它:'require('dotenv').load();'在你的混合文件中,现在你可以做到了:

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

【讨论】:

  • 但是我需要从 .env 文件中读取数据,而不是从 package.json 中读取数据
  • 变量NODE_ENV从何而来?
  • 当然,安装包dotenv 你会读到的。自动从根读取包。 NODE_ENV 是一个静态变量
【解决方案2】:

无需在 .env 文件中创建中间变量 MIX_APP_ENV。 以下代码正在运行:

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

【讨论】:

    【解决方案3】:

    我意识到这是一个老问题,但最简单的解决方法(让你的代码工作)是改变......

    我在 .env 文件中做了以下操作:APP_ENV=production MIX_APP_ENV="${APP_ENV}"

    ..到..

    APP_ENV=生产 MIX_APP_ENV=生产

    (您的 webpack.mix.js 将无法将“${APP_ENV}”转换为“生产”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-16
      • 2020-08-11
      • 2020-03-29
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 2021-05-06
      • 2018-09-11
      相关资源
      最近更新 更多