当 运行 到 docker 时,react-scripts 构建失败

react-scripts build fails when run through docker

当我从 docker 容器 运行 命令 react-scripts build 时出现编译错误,但当我在本地 运行 它时它可以正常工作。这些错误似乎只与打字稿有关,但我对此不是 100% 确定。我得到的错误是 Syntax error: Unexpected token, expected "," 在绝对不应该有它们的代码中。一些例子:

#16 63.56 > 11 | type Props<T extends string> = {
#16 63.56      |              ^
#16 70.86    9 | export const ADDRESS_INIT_VALUE = {
#16 70.86 > 10 |        country: (null as unknown) as Country,
#16 70.86      |                       ^

这是我正在使用的docker文件:

# syntax = docker/dockerfile:experimental

## BUILD image ##
FROM node:15.2.1-alpine3.12 AS builder
WORKDIR /web

# Copy package files
COPY ./web/package.json ./
COPY ./web/yarn.lock ./

# Install dependencies
RUN yarn install

# Copy and build app
COPY ./web ./
RUN yarn build

## RUN Image ##
FROM httpd:alpine

# Apache conf
COPY ./web/.docker/httpd.conf /usr/local/apache2/conf/httpd.conf

COPY --from=builder /web/build/ /usr/local/apache2/htdocs/

到目前为止,我已经尝试了多个节点 docker 图像,没有任何区别。我还确保我拥有与 docker 图像完全相同的节点和纱线版本。我还删除了我在本地使用的 node_modulesyarn.lock,并进行了全新安装和构建,没有出现任何错误。

对于构建为何在 docker 中出现这些奇怪错误的任何建议或想法,我们将不胜感激。

查看根目录下的一些配置文件,在copy packages部分添加。

事实证明我 .eslintrc.json 被 Docker 忽略了,并且在构建期间从默认设置 eslint 规则中得到错误。

解决方案,我已将此 dockerfile 的 .dockerignore 中的所有 linter 文件列入白名单。

*

!web/.docker
!web/public
!web/src
!web/package.json
!web/yarn.lock
!web/tsconfig.json
!web/.editorconfig
!web/.eslintrc.json
!web/.prettierrc
!web/.stylelintrc