【问题标题】:" xxx is not defined no-undef" on Docker build command out of suddenDocker build 命令突然出现“xxx is not defined no-undef”
【发布时间】: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


【解决方案1】:

npm 有两个文件说明需要安装哪些包。 package.json 列出了包和潜在的广泛版本限制; package-lock.json 具有在特定构建中使用的非常特定版本的软件包。当您在 Dockerfile 中进行初始安装时,您应该将这两个文件复制到映像中:

COPY package.json package-lock.json .
RUN npm ci

您描述的问题听起来不像是 Docker 或 Node 本身的问题,而是npm run build 序列中使用的软件包之一。由于原始 Dockerfile 不包含 package-lock.json 文件,因此如果某些涉及的软件包从版本 1.2.3 更新到 1.2.4 并且较新版本出现问题,那么一切看起来都是一致的,直到构建最终失败。包含锁定文件使您保持在已知工作的构建链上。

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 2021-12-06
    • 2021-06-16
    • 2022-11-03
    • 2017-03-20
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多