Docker 构建无法解析绝对路径

Chi*_*isa 0 docker reactjs

我有一个反应应用程序,我使用绝对导入而不是相对导入(https://medium.com/@ktruong008/absolute-imports-with-create-react-app-4338fbca7e3d)。在我的本地机器上一切正常,但是当我尝试在 docker 上构建时它失败了。

我有一个 .env 文件,其中包含NODE_PATH='./'create-react-app 的配置方式,它的 webpack 配置将自动选取“.env”文件并读取NODE_PATH环境变量,然后可以将其用于绝对导入,例如src/components/NavBar,解决。

但是当我尝试在 docker 上构建时,它没有解决,而是抛出了这个错误。

Cannot find module: 'src/components/NavBar'. Make sure this package is installed.
You can install this package by running: yarn add src/components/NavBar.
Run Code Online (Sandbox Code Playgroud)

任何指针将不胜感激。

今天是我第一次使用 Docker,所以我是个菜鸟。

附加信息:

我使用 Dockerfile 和 docker-compose.yml 文件。

我使用 react-app-rewired ( https://github.com/timarney/react-app-rewired ) 它基本上可以帮助您覆盖 create-react-app webpack 配置而不弹出。

文件

FROM node:10.15.1

ENV NODE_ENV production

RUN mkdir /usr/invoicing

COPY . /usr/invoicing

WORKDIR /usr/invoicing

RUN npm install

RUN npm run build
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: '3.5'
services:
  web:
    container_name: invoice-frontend
    build:
      context: .
      dockerfile: Dockerfile
    command: npm start
    ports:
      - '3000:3000'
    networks:
      - frontend
    environment:
      - NODE_ENV=production
networks:
  frontend:
    driver: 'bridge'
Run Code Online (Sandbox Code Playgroud)

Chi*_*isa 7

我找到了问题和解决方案:

显然,我命名了一个文件夹navBar,当我将它重命名为时NavBar,Git 没有检测到文件夹名称的变化,也没有做任何处理。所以在我的本地机器(这是一台 Mac)上,它显示了 NavBar 但在使用 git commits 的 Gitlab 上,它仍然出现,因为navBarcos Docker 在 Linux 上运行,Linux 区分大小写,构建失败。

这也解释了为什么构建在我的本地机器上工作。Mac 的文件系统 hfplus 不区分大小写,因此没有发现问题。

解决重命名问题;我使用了git mv命令。有一个警告;如果您想在Mac 等不区分大小写的文件系统上将a 重命名foldernamefolderName(即更改大小写),您将收到一条错误消息fatal: renaming ‘foldername’ failed: Invalid argument.

为了成功重命名文件夹,请使用此命令。 git mv foldername tempname && git mv tempname folderName. 这将过程分为两个步骤;首先将文件夹名称重命名为临时名称,并将临时名称重命名为文件夹名称。

希望这有助于某人