跳到内容

在虚拟机中使用 Encore

编辑此页

Encore 兼容虚拟机,例如 VirtualBoxVMWare,但您可能需要对配置进行一些更改才能使其工作。

文件监听问题

当使用虚拟机时,您的项目根目录通过 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 许可协议获得许可。
目录
    版本