我有一个带有 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
在构建过程中按预期返回变量,所以我不明白出了什么问题。有什么想法吗?
进程在当前范围内不可用,您可以尝试全局设置 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);