无法使用create-react-app和docker windows进行webpack hotreload

Ale*_*ex 3 windows docker reactjs create-react-app hot-reload

我们将使用dockersetup开发一个react pwa,并在部署到master分支期间将应用发布到gitlab页面上。

我在Windows设备上工作,无法在开发人员模式下获得热重载的功能。每当我进行一些更改时,代码都不会重新编译。我必须docker-compose up --build每次都进行每次更改。

有什么可能的方法使windows/docker/create-react-app设置上的热重加载工作?

在package.json之后:

 {
  "name": "Appname",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.7.0",
    "react-dom": "^16.7.0",
    "react-scripts": "2.1.1"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "buildandserver": "react-scripts build && serve -s build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}
Run Code Online (Sandbox Code Playgroud)

现在,用于开发人员设置的Dockerfile:

FROM node:9.6.1
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install react-scripts@1.1.1 -g
# start app
CMD ["npm", "start"]
Run Code Online (Sandbox Code Playgroud)

至少在docker-compose进行dev-setup:

version: '3.5'

services:

  App-Name:
    container_name: App-Name
    build:
      context: .
      dockerfile: devsetup/Dockerfile
    volumes:
      - './:/usr/src/app'
      - '/usr/src/app/node_modules'
    ports:
      - '3000:3000'
    environment:
      - NODE_ENV=development
Run Code Online (Sandbox Code Playgroud)

我在设备上为Windows运行docker。希望有人能帮助我...谢谢!

M U*_*M U 6

问题主要是由您在Windows上引起的。

为什么?

因为Windows上的Docker不能很好地与卷配合使用。更准确地说-它不会将体积变化通知容器。它确实公开了容器中的最新文件,但是容器内的Linux“不知道”文件已更改这一事实,这是触发Webpack重新编译所必需的。

解决方案很少:

  1. 切换到Linux进行开发(我知道这可能是不可能的,但是如果您与docker经常合作,并且可以移动-这样做。Linux上的Linux容器工作得更快,卷没有问题等)
  2. 如果不能,则可以在weback中使用旧版轮询,评论中已经提到
  3. 您可以使用例如https://github.com/merofeev/docker-windows-volume-watcher,它是基于Python的工具,可监视卷内的本地文件和容器文件,并将更改通知容器。

我发现3个工作要比2个好一些,但是两者都会牺牲一些性能。

希望对您有所帮助。如果您有任何疑问,请发表评论,我会尝试进行编辑以更好地解释。