环境变量不适用于 Docker 容器中的 Webpack Encore

问题描述 投票:0回答:1

我有一个带有 Webpack Encore 的 Symfony 项目。我的机器上安装了 MySQL、PHP、Mercure、Yarn/NodeJS 等,但我转而使用 dunglas/symfony-docker。虽然它之前可以工作,但在新设置中我的环境变量没有按预期工作。

# .env.local
MERCURE_HUB_URL=https://localhost/.well-known/mercure

# webpack.config.js
Encore.configureDefinePlugin(options => {
  const environment = dotenv.config({
    path: './.env.local',
    debug: false
  })
  console.info(environment.parsed)
  options['process.env.MERCURE_HUB_URL'] = JSON.stringify(environment.parsed.MERCURE_HUB_URL)
}

# api.js
const hub = new URL(process.env.MERCURE_HUB_URL)

这曾经有效,但现在我在容器中运行 Node:

# compose.yaml
encore:
  image: node:latest-alpine
  volumes:
    - .:/app
  ports:
    - "8080:8080"
  working_dir: /app
  depends_on:
    - php
  command: >
    sh -c "yarn install && yarn encore dev-server"

虽然这有效(开发服务器运行 webpack 编译),但

process
中的
api.js
未定义:

api.js:123 Uncaught ReferenceError:进程未定义

我的

console.info(environment.parsed)
中的
webpack.config.js
在构建过程中按预期返回变量,所以我不明白出了什么问题。有什么想法吗?

node.js symfony webpack
1个回答
0
投票

进程在当前范围内不可用,您可以尝试全局设置 MERCURE var,因此不需要在“前端”代码中进行进程。像这样:

  .configureDefinePlugin(options => {
    const env = dotenv.config({
      path: './.env.local',
      debug: false
    }).parsed;

options['MERCURE_HUB_URL'] = JSON.stringify(env.MERCURE_HUB_URL);

然后您可以在 api.js 中使用它,如下所示:

const hub = new URL(MERCURE-HUB-URL);
© www.soinside.com 2019 - 2024. All rights reserved.