You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Laravel Mix环境变量失效问题求助

问题原因

容器内执行脚本时,默认shell通常是sh而非宿主机的bash,不支持$(...)这种命令替换语法;或者cross-env在容器环境下无法正确传递通过shell命令生成的环境变量,导致APP_VERSION无法被正确赋值,进而MIX_APP_VERSION取不到值。

解决方案

方案1:用Node脚本替代shell命令替换

绕开shell兼容性问题,直接用Node脚本读取版本并启动mix:

  1. 在项目根目录新建start-watch.js:
const { execSync } = require('child_process');
const packageJson = require('./package.json');

process.env.APP_VERSION = packageJson.version;
execSync('mix watch', { stdio: 'inherit' });
  1. 修改package.json的scripts:
"scripts": {
  // ...
  "watch": "node start-watch.js"
}

方案2:直接在React组件中导入package.json

跳过环境变量传递环节,直接读取版本:

import packageJson from '../package.json';

// 组件内使用
<div>version {packageJson.version}</div>

若生产构建时webpack报错,需在webpack.mix.js中添加配置允许导入package.json:

mix.webpackConfig({
  externals: {
    'package.json': JSON.stringify(require('./package.json'))
  }
});

方案3:Docker构建时注入版本到.env

在Docker构建阶段直接将版本写入.env,后续脚本无需额外处理:

COPY . .
# 把package.json版本注入到.env
RUN echo "MIX_APP_VERSION=$(node -pe 'require(\"./package.json\").version')" >> .env
# 执行构建命令
RUN npm run prod

内容的提问来源于stack exchange,提问作者Metaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 13:45:30