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
命令。
发现者:
- 删除
npm run start
命令。
- 运行 容器,这样它就不会退出。
- 正在容器上执行 shell 并查看文件结构。
- 运行 npm 安装。
修复:
确保 COPY
命令在 npm install
之前是 运行
例如
COPY . ./
RUN npm install
当 运行 我的本地机器上的 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
命令。
发现者:
- 删除
npm run start
命令。 - 运行 容器,这样它就不会退出。
- 正在容器上执行 shell 并查看文件结构。
- 运行 npm 安装。
修复:
确保 COPY
命令在 npm install
例如
COPY . ./
RUN npm install