首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用webpack-dev-server和docker的热重新加载

不使用webpack-dev-server和docker的热重新加载
EN

Stack Overflow用户
提问于 2019-11-14 16:21:35
回答 3查看 6.5K关注 0票数 12

使用安装了坞的Ubuntu。没有VM。

我已经用vuejs应用程序构建了一个坞映像。为了启用热重新装载,我用以下内容启动了码头容器:

代码语言:javascript
运行
复制
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image

它可以很好地启动,我可以在localhost:8081上的主机浏览器上访问它。但是,当我对源文件进行更改并保存这些更改时,在我按F5 (热重加载不起作用)之前,它们不会反映在我的浏览器中。

详情如下:

package.json

代码语言:javascript
运行
复制
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",

build/webpack.dev.conf.js

代码语言:javascript
运行
复制
  devServer: {
    clientLogLevel: 'warning',
    ...
    hot: true,
    ...
    watchOptions: {
      //poll: config.dev.poll,
      //aggregateTimeout: 500, // delay before reloading
      poll: 100 // enable polling since fsevents are not supported in docker

    }

试图修改watchOptions,但没有任何效果。

编辑:

基于下面的答案,我尝试将:CHOKIDAR_USEPOLLING=true作为一个环境变量传递给docker运行:

代码语言:javascript
运行
复制
docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -e "CHOKIDAR_USEPOLLING=true" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image

但它没有影响-仍然不能热重新加载我的变化。在提供的链接中,它还说:

更新/澄清:只有在VM中运行您的Docker引擎时才会出现此问题。如果您在Linux上同时使用Docker和coding,那么您就没有这个问题。

所以,不要认为答案适用于我的设置-我是运行Ubuntu在我的机器上,我已经安装了对接。所以没有VM设置。

另一个更新-基于下面关于更改端口映射的注释:

代码语言:javascript
运行
复制
  # Hot reload works!
  docker run -it -p 8080:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image

  # Hot reload fails!  
  #docker run -it -p 8081:8080 -e "HOST=0.0.0.0" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image

因此,如果我将映射移植到8080:8080而不是8081:8080,热重新加载就可以了!注意,当我在前面提到的端口上的localhost上的主机浏览器上访问它时,在这两种情况下都会出现应用程序。只有当我将应用程序映射到我的主机上的8080时,热重加载才能工作。

但为什么?

如果我这么做了:

代码语言:javascript
运行
复制
PORT='8081'
docker run -it -p "${PORT}:${PORT}" -e "HOST=0.0.0.0" -e "PORT=${PORT}" -v ${PWD}:/app/ -v /app/node_modules --name my-frontend my-frontend-image

热重装当然有效。但仍不清楚为什么不能将8080到8081的内部容器端口映射到主机上。

顺便说一句,如果我使用vue-cli-service serve,我一点也看不出问题所在--所有的事情都是凭空捏造的。

EN

回答 3

Stack Overflow用户

发布于 2019-11-21 14:25:50

我根本不是VueJS用户,从未使用过它,但我在开发工作流程中大量使用了Docker,而在过去,我也经历过类似的问题。

在我的示例中,发送到浏览器的Javascript试图连接到码头容器8080的内部端口,但是一旦主机的映射端口是8081,浏览器中的JS就无法到达码头容器内的8080,因此热重载无法工作。

因此,在我看来,您拥有与我相同的场景,因此您需要在VueJS应用程序中配置热重加载,以便在主机上使用相同的端口侦听,或者只使用相同的端口,因为您已经得出结论,这两个端口都可以工作。

票数 6
EN

Stack Overflow用户

发布于 2019-11-17 09:29:12

如果watchOptions不能工作,您可以尝试另一种选择:

代码语言:javascript
运行
复制
 environment:

  - CHOKIDAR_USEPOLLING=true

根据这里的文档:

“如果观看对你不起作用,那就试试这个选项。在VirtualBox中,观看不适用于NFS和机器。“

参考资料:

https://daten-und-bass.io/blog/enabling-hot-reloading-with-vuejs-and-vue-cli-in-docker/

票数 1
EN

Stack Overflow用户

发布于 2021-07-17 15:06:41

它很久以前就被问到了,但是我也遇到了同样的问题,然后我注意到devServer配置对象中有一个devServer,它让我们设置websocket连接用来与服务器进行实时/热重新加载的端口。

我所做的是通过一个环境变量设置这个选项,当从容器外部访问dev服务器时,它工作得很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58861358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档