在虚拟机中使用 Encore
Encore 兼容虚拟机,例如 VirtualBox 和 VMWare,但您可能需要对配置进行一些更改才能使其工作。
文件监听问题
当使用虚拟机时,您的项目根目录通过 NFS 与虚拟机共享。这会引入文件监听问题,因此您必须启用 轮询 选项才能使其工作
1 2 3 4 5 6 7 8
// webpack.config.js
// ...
// will be applied for `encore dev --watch` and `encore dev-server` commands
Encore.configureWatchOptions(watchOptions => {
watchOptions.poll = 250; // check for changes every 250 milliseconds
});
开发服务器问题
配置公共路径
注意
如果您的应用程序运行在 http://127.0.0.1
而不是像 http://app.vm
这样的自定义本地域名上,则可以跳过此部分。
当运行开发服务器时,您可能会在 Web 控制台中看到以下错误
1 2 3
GET http://127.0.0.1:8080/build/vendors~app.css net::ERR_CONNECTION_REFUSED
GET http://127.0.0.1:8080/build/runtime.js net::ERR_CONNECTION_REFUSED
...
如果您的 Symfony 应用程序运行在自定义域名上(例如 http://app.vm
),您必须在 package.json
中显式配置公共路径
1 2 3 4 5 6 7 8
{
...
"scripts": {
- "dev-server": "encore dev-server",
+ "dev-server": "encore dev-server --public http://app.vm:8080",
...
}
}
在重启 Encore 并重新加载您的网页后,您可能会在 Web 控制台中看到不同的问题
1 2
GET http://app.vm:8080/build/vendors~app.css net::ERR_CONNECTION_REFUSED
GET http://app.vm:8080/build/runtime.js net::ERR_CONNECTION_REFUSED
您仍然需要进行其他配置更改,如下节所述。
允许外部访问
将 --host 0.0.0.0
参数添加到您的 package.json
文件中的 dev-server
配置中,以使开发服务器接受所有传入的连接
1 2 3 4 5 6 7 8
{
...
"scripts": {
- "dev-server": "encore dev-server --public http://app.vm:8080",
+ "dev-server": "encore dev-server --public http://app.vm:8080 --host 0.0.0.0",
...
}
}
危险
确保仅在您的虚拟机内部运行开发服务器;否则其他计算机可以访问它。
修复 "无效 Host header" 问题
当尝试从开发服务器访问文件时,Webpack 将响应 Invalid Host header
。要修复此问题,请设置 allowedHosts
选项
1 2 3 4 5 6 7 8 9
// webpack.config.js
// ...
Encore
// ...
.configureDevServerOptions(options => {
options.allowedHosts = all;
})
警告
请注意,通常 不建议将 allowedHosts 设置为全部,但在这里,这是解决在虚拟机中使用 Encore 时的问题所必需的。
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。