server.tsx 构建 docker 图像时未找到模块

server.tsx module not found when building docker image

当 运行 我的本地机器上的 create-react-app 服务器 npm run start 时,服务器启动并工作正常。但是,在尝试对我的应用程序进行 docker 化时,出现错误:

#12 2.029 Error: Cannot find module '/usr/src/app/sms-fe/src/server.tsx'
#12 2.029     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:1085:15)
#12 2.029     at Function.Module._load (internal/modules/cjs/loader.js:928:27)
#12 2.029     at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
#12 2.029     at internal/main/run_main_module.js:17:47 {
#12 2.029   code: 'MODULE_NOT_FOUND',
#12 2.029   requireStack: []
#12 2.029 }
#12 2.033 npm ERR! code ELIFECYCLE
#12 2.034 npm ERR! errno 1

似乎找不到 server.tsx 文件。然而,尽管我的本地计算机上没有物理 src/server.tsx 文件,但该应用程序仍然可以正常运行。我猜 react-scripts 可能在后台做某事,但我不确定是什么。

有什么想法吗?

这是我的 Docker 和 package.json 文件。

Docker文件

FROM node:14.7-alpine

WORKDIR /usr/src/app/sms-fe

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

RUN npm install -g typescript

RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

COPY . ./

EXPOSE 8080 

# RUN node scripts/start.js && node ./src/server.tsx
RUN ["npm", "run", "start"]

package.json

"scripts": {
    "start": "react-scripts start && node ./src/server.tsx",
...

这原来是 运行 在 npm install 之后执行我的 COPY 命令的问题。导致进一步的问题。似乎两个复制命令中的第一个 (COPY package*.json ./) 没有复制我的 package-lock.json 文件,或者它被覆盖了,可能是第二个 COPY 命令。

发现者:

  1. 删除 npm run start 命令。
  2. 运行 容器,这样它就不会退出。
  3. 正在容器上执行 shell 并查看文件结构。
  4. 运行 npm 安装。

修复:

确保 COPY 命令在 npm install

之前是 运行

例如

COPY . ./

RUN npm install