【发布时间】:2022-01-26 00:06:50
【问题描述】:
我正在使用 WSL2 中的 docker 和 create-react-app 创建一个 React 应用程序,一切似乎都运行良好,除了应用程序没有随着代码的更改而更新。我的意思是,当我对代码进行更改时,浏览器应该会自动更新更改,但它不会,我必须重新启动容器才能看到它们。我在 ENV 中添加了 CHOKIDAR_USEPOLLING=true 但它也不起作用。这些是配置文件:
dockerfile
# pull official base image
FROM node:16.13.1
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH
# install app dependencies
COPY package.json ./
COPY package-lock.json ./
RUN npm install
# add app
COPY . ./
# start app
CMD ["npm", "start"]
docker-compose.yml
services:
react:
build: ./frontend
command: npm start
ports:
- 3000:3000
volumes:
- ./frontend:/app
- '/app/node_modules'
env_file:
- 'env.react'
env.react
CHOKIDAR_USEPOLLING=true
package.json
{
"name": "app",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.16.1",
"@testing-library/react": "^12.1.2",
"@testing-library/user-event": "^13.5.0",
"mdbreact": "^5.2.0",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-painter": "^0.4.0",
"react-router-dom": "^6.2.1",
"react-scripts": "5.0.0",
"sass": "^1.45.1",
"web-vitals": "^2.1.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
你能看出我做错了吗?谢谢!
【问题讨论】:
-
“除了应用程序没有更新更改”你是什么意思。什么变化,在哪里做出的?应用应该如何更改为什么操作。
-
我的意思是,当我对代码进行更改时,浏览器应该会自动更新更改,但它不会。我认为这叫做热重载。
-
我不太确定容器是否可行。例如,当您处理 java 和 IntelliJ 并且您让服务器在本地运行时,我知道它是可能的。但我从未见过有人在使用容器技术时让它工作。据我所知,您正在尝试使用卷,但是一旦重建,应用程序文件可能会在本地刷新,但卷仍然相同。
-
spa 热重载功能适用于开发阶段而不是生产阶段。与我们分享 package.json
-
我通常直接使用 Node 进行这种开发,而不是试图让 Docker 相信它想要摆脱其正常的文件系统隔离。这种设置并没有真正使用 Docker 的任何功能(您没有不可变的可复制映像,前端应用程序无法使用 Docker 网络),并且不清楚您从 Docker 获得什么好处。
标签: node.js reactjs docker wsl-2