Docker构建无法解析绝对路径

时间:2019-01-31 18:49:15

标签: reactjs docker

我有一个React应用,其中我使用绝对导入而不是相对导入(https://medium.com/@ktruong008/absolute-imports-with-create-react-app-4338fbca7e3d)。一切都可以在本地计算机上正常运行,但是当我尝试在docker上构建时,它会失败。

我有一个包含NODE_PATH='./'的.env文件,并且对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.

任何指针将不胜感激。

今天是我第一次与Docker合作,所以我是个菜鸟。

其他信息:

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

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

Dockerfile

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

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'

1 个答案:

答案 0 :(得分:0)

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

显然,我命名了一个文件夹example.com,当我将其重命名为navBar时,Git并未检测到文件夹名称的更改,也没有对此进行任何处理。因此,在我的本地计算机(是Mac)上,它显示了NavBar,但在使用git commits的Gitlab上,它仍然显示为NavBar,并且cos Docker在Linux上运行并且Linux区分大小写,构建失败。 >

这也解释了为什么该构建可以在我的本地计算机上运行。 Mac的文件系统hfplus不区分大小写,因此没有出现问题。

解决重命名问题;我使用了navBar命令。有一个警告。如果您要在Mac等不区分大小写的文件系统上将git mv重命名为foldername(即更改大小写),则会收到一条错误消息,提示folderName

为了成功地重命名文件夹,请使用此命令。 fatal: renaming ‘foldername’ failed: Invalid argument.。这将过程分为两个步骤。首先将foldername重命名为tempname,并将tempname重命名为folderName。

希望这对某人有帮助