【问题标题】:app.js unable to get environment variable when deploy using Laravel envoy使用 Laravel envoy 部署时 app.js 无法获取环境变量
【发布时间】:2021-12-23 04:05:56
【问题描述】:

我想用 envoy 部署我的应用程序,以确保停机时间为零。 经过一些研究,我发现这个脚本完全符合我的要求。 https://github.com/papertank/envoy-deploy

基本上后端一切正常。我能够克隆项目,执行所有命令并将其指向最新项目。之后,我为我的 vue 组件添加了一个新的 npm 任务。这是任务

@task('deployment_assets')
   echo 'Running npm'
   cd {{ $release }}
   sudo npm ci --production
   sudo npm audit fix --only=prod
   sudo npm run prod
@endtask

为此,我将我的 laravel mix 相关依赖项从 devDependencies 移动到依赖项。

"dependencies": {
        "laravel-mix": "^6.0.31",
        "resolve-url-loader": "^4.0.0",
        "sass": "~1.32.0",
        "sass-loader": "^11.0.1",
        "vue-loader": "^15.9.5",
        "webpack": "^5.23.0"
    },

运行任务时,出现第一个问题,我的 webpack.mix.js 似乎无法读取变量。调用 process.env.APP_URL 时,它返回未定义。这是语法。

if (process.env.APP_URL.match(/https?:\/\/.*\/.+/)) {
   mix.setResourceRoot(process.env.APP_URL);
}

这是我的 .env 外观

APP_DEBUG=true
APP_URL=http://homestead.test

在我检查了 laravel mix 问题后,他们建议使用

require('dotenv').config({ path: '~/www/app/.env'});

加载环境变量。

所以我把 webpack.mix.js 改成了

const mix = require('laravel-mix');
require('dotenv').config({ path: '~/code/app/.env'});

好的,现在我可以通过 process.env 检索所有变量。任务完成。然后当我导航到我的项目时,发生了第二个问题。

我的 app.js 无法获取 process.env,它在我 console.log(process.env) 时返回 {}

if (process.env.APP_URL.match(/https?:\/\/.*\/.+/)) {
//
}

我可以确认 .env 存在,否则在运行 npm run prod 时会抛出错误只是不确定为什么它无法检索 app.js 中的 env 变量

我知道这可能不是在生产环境中编译资产的最佳做法。但这对我来说是必要的,因为我的 vue 组件与 .env 文件共享相同的环境变量,所以我需要在服务器中编译资产以确保它使用生产 .env 文件。

有人知道怎么解决吗?

【问题讨论】:

    标签: laravel laravel-mix laravel-envoy


    【解决方案1】:

    好了,经过一些故障排除,可以确认获取mix中的环境变量,前缀MIX_是必须的。确保在替换 .env 变量之后运行 php artisan config:cache 以使变量是最新版本,一开始我很困惑为什么在删除前缀 MIX_ 后它仍然有效,原来这是缓存问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 2022-10-23
      相关资源
      最近更新 更多