【问题标题】:Running development server with create-react-app inside of a docker container在 docker 容器内使用 create-react-app 运行开发服务器
【发布时间】:2017-11-22 09:45:37
【问题描述】:

我正在尝试在 docker 容器内运行 create-react-app 的开发服务器,并让它重新编译并将更改的应用程序代码发送到客户端以用于开发目的,但它没有从内部获取更改码头集装箱。

(当然,我有应用程序的工作目录作为容器的卷。)

有没有办法让这个工作?

【问题讨论】:

  • 如果您使用 docker run -it --rm -v ${PWD}:/app -v /app/node_modules -p 3001:3000 -e CHOKIDAR_USEPOLLING=true sample:dev 之类的东西启动,请确保您使用 powershell 并且变量插值有效(带有 ${} 的部分)。我正在使用 git bash,它正在创建一些奇怪的文件夹,并且 react live reload 无法正常工作。切换到 powershell 解决了这些问题。

标签: docker create-react-app


【解决方案1】:

如果你使用 linux 那么你不需要使用CHOKIDAR_USEPOLLING=true

【讨论】:

    【解决方案2】:

    如果您的更改未被拾取,则可能是文件监视机制存在问题。此问题的解决方法是配置轮询。您可以按照@Javascriptonian 的说明在全局范围内执行此操作,但您也可以通过 webpack 配置在本地执行此操作。这样做的好处是可以指定被忽略的文件夹(例如node_modules),这会在使用轮询时减慢观看过程(并导致高 CPU 使用率)。

    在你的 webpack 配置中,添加如下配置:

    devServer: {
      watchOptions: {
        poll: true, // or use an integer for a check every x milliseconds, e.g. poll: 1000
        ignored: /node_modules/ // otherwise it takes a lot of time to refresh
      }
    }
    

    来源:documentation webpack watchOptions


    如果您在后端 Node.js 项目中遇到与 nodemon 相同的问题,您可以使用启动轮询的 --legacy-watch 标志(简称 -L)。

    npm exec nodemon -- --legacy-watch --watch src src/main.js
    

    或在 package.json 中:

    "scripts": {
      "serve": "nodemon --legacy-watch --watch src src/main.js"
    }
    

    文档:nodemon legacy watch

    【讨论】:

      【解决方案3】:

      另一个答案中建议的轮询会导致更高的 CPU 使用率并迅速耗尽电池电量。您不需要CHOKIDAR_USEPOLLING=true,因为文件系统事件应该传播到容器。从最近开始,即使您的主机运行 Windows,这也应该可以工作:https://docs.docker.com/docker-for-windows/release-notes/#docker-desktop-community-2200(搜索“inotify”)。

      但是,当使用 Docker for Mac 时,这种机制有时似乎会失败:https://github.com/docker/for-mac/issues/2417#issuecomment-462432314

      重新启动 Docker 守护程序对我有帮助。

      【讨论】:

        【解决方案4】:

        其实我找到了答案here。显然 create-react-app 使用 chokidar 来监视文件更改,并且它有一个标志 CHOKIDAR_USEPOLLING 来使用轮询来监视文件更改。所以CHOKIDAR_USEPOLLING=true npm start 应该可以解决这个问题。至于我,我在 docker 容器的环境变量中设置了CHOKIDAR_USEPOLLING=true 并刚刚启动了容器。

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-02
        • 2022-06-28
        • 2018-10-01
        • 2018-07-16
        • 1970-01-01
        相关资源
        最近更新 更多