【发布时间】:2021-05-25 15:07:57
【问题描述】:
我有一个简单的 ReactJS 应用程序,它使用 Docker 部署到 AWS EB。
我的 Dockerfile 如下所示:
FROM node:12.2.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
ENV REACT_APP_VAR val
ENV REACT_APP_VAR2 val2
COPY package.json /app/package.json
RUN npm install --silent --unsafe-perm --max-old-space-size=1024
RUN npm install react-scripts@3.0.1 -g --silent --max-old-space-size=1024
COPY . /app
RUN npm --max-old-space-size=1024 run build
FROM nginx:1.16.0-alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
到目前为止,我已经使用同一个 docker 文件几个月了。今天突然,我开始在 AWS EB 日志上构建如下错误(尝试在本地构建映像时遇到同样的错误)
Step 21/26 : RUN npm --max-old-space-size=1024 run build
---> Running in 879c536e7f65
> frontend@0.1.0 build /app
> react-scripts build
Creating an optimized production build...
Failed to compile.
./src/components/file.js
Line 187:5: 'SomeCustomButtonRef' is not defined no-undef
Search for the keywords to learn more about each error.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! frontend@0.1.0 build: `react-scripts build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the frontend@0.1.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-02-23T10_25_14_373Z-debug.log
这个错误从今天开始突然发生。
当我在本地运行命令 npm --max-old-space-size=1024 run build 时不带任何 Docker 相关命令,它运行良好并构建。
我曾尝试更改 Dockerfile 中的节点版本标签,但结果是一样的。我试图注释掉它中断的部分(它只是 SomeCustomButtonRef = React.createRef()),但随后 docker build 命令在其他文件中以更多行 ABC is not defined no-undef 中断。
任何人都遇到过类似的 react + docker 问题,尤其是突然间它开始破坏构建?
【问题讨论】:
-
这看起来像是您的
package.json调用的构建工具的问题,而不是 Node 或 Docker。如果您在RUN npm install之前还COPY package.lock进入映像,您将获得固定版本的依赖项;包含该文件是否有帮助(通过使用稍旧版本的构建工具链)? -
@DavidMaze 你的意思是 package-lock.json?
-
是的。 (我想我在想
yarn.lock,这是yarn的等价物。) -
@DavidMaze 复制 package-lock.json 在我的本地工作,将尝试部署到 EB。我意识到的一件事是,一个较旧的分支可以在没有将 package-lock.json 添加到 Dockerfile 的情况下正常工作,并且具有相同的内容。会不会是某些文件没有被跟踪,从而导致某处出现某种脏缓存/文件?
-
它也适用于 EB,并添加了 package-lock.json。您能回答这个问题,以便我将其作为答案吗?
标签: node.js reactjs docker dockerfile