Docker 使用 create react app 未更新更改
Docker with create react app is not updating changes
我正在使用 WSL2 中的 docker 和 create-react-app 创建一个 React 应用程序,一切似乎都运行良好,除了该应用程序没有随着代码的更改而更新。我的意思是,当我更改代码时,浏览器应该会自动更新更改,但事实并非如此,我必须重新启动容器才能看到它们。我在 ENV 中添加了 CHOKIDAR_USEPOLLING=true 但它也不起作用。这些是配置文件:
docker文件
# 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"
]
}
}
你能看出我做错了什么吗?谢谢!
问题出在 WSL2 上,正如这个回答 www.github.com/microsoft/WSL/issues/6255#issuecomment-730701001 中所说:“如果它在 Windows 文件系统中,我相信您 运行 了解事实WSL 2 中的 Plan 9 服务器不支持监视 Windows 文件。作为解决方法,我建议您将文件放入 Linux 文件系统”。我将文件移动到 \\wsl$\Ubuntu\home\user,现在重新加载工作正常。我也停止将 Docker 与 React 一起使用,现在我直接使用 Node,正如评论中所推荐的那样。
请注意,我在单独使用 Node 时遇到了同样的问题,文件在 Linux 文件系统之外。
添加这个环境变量:
environment:
- CHOKIDAR_USEPOLLING=true
我正在使用 WSL2 中的 docker 和 create-react-app 创建一个 React 应用程序,一切似乎都运行良好,除了该应用程序没有随着代码的更改而更新。我的意思是,当我更改代码时,浏览器应该会自动更新更改,但事实并非如此,我必须重新启动容器才能看到它们。我在 ENV 中添加了 CHOKIDAR_USEPOLLING=true 但它也不起作用。这些是配置文件:
docker文件
# 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"
]
}
}
你能看出我做错了什么吗?谢谢!
问题出在 WSL2 上,正如这个回答 www.github.com/microsoft/WSL/issues/6255#issuecomment-730701001 中所说:“如果它在 Windows 文件系统中,我相信您 运行 了解事实WSL 2 中的 Plan 9 服务器不支持监视 Windows 文件。作为解决方法,我建议您将文件放入 Linux 文件系统”。我将文件移动到 \\wsl$\Ubuntu\home\user,现在重新加载工作正常。我也停止将 Docker 与 React 一起使用,现在我直接使用 Node,正如评论中所推荐的那样。
请注意,我在单独使用 Node 时遇到了同样的问题,文件在 Linux 文件系统之外。
添加这个环境变量:
environment:
- CHOKIDAR_USEPOLLING=true