Docker构建应用遇TS5083错误:无法读取tsconfig.json
解决Docker构建时tsconfig.json无法读取的问题
问题描述
本地src目录下存在tsconfig.json,.eslintrc已指定其位置,且两者均已复制到Docker构建环境,但执行npm run build时仍报错:
error TS5083: Cannot read file '/opt/node_app/src/tsconfig.json'
构建日志
#12 [stage-0 8/8] RUN npm run build #12 0.303 #12 0.303 > digittron@1.0.0 build #12 0.303 > tsc -b src #12 0.303 #12 0.390 error TS5083: Cannot read file '/opt/node_app/src/tsconfig.json'. #12 ERROR: process "/bin/sh -c npm run build" did not complete successfully: exit code: 1
使用的Dockerfile
FROM node:lts-slim RUN npm i npm@latest -g USER node WORKDIR /opt/node_app COPY --chown=node:node package*.json ./ # Setup npmrc RUN --mount=type=secret,id=TOKEN \ TOKEN=<placeholder> && \ echo //npm.pkg.github.com/:_authToken=${TOKEN} >> ~/.npmrc && \ echo @${OWNER}:registry=https://npm.pkg.github.com/ >> ~/.npmrc && \ npm ci && npm cache clean --force ENV PATH /opt/node_app/node_modules/.bin:$PATH WORKDIR /opt/node_app/app COPY --chown=node:node src/ src/ RUN npm run build CMD ["npm", "run", "start"]
本地目录结构
├── Dockerfile ├── src │ ├── bot.ts │ ├── client.ts │ ├── lib │ │ ├── client │ │ │ ├── EventSubClient.ts │ │ │ └── Logger.ts │ │ ├── commands │ │ │ └── commandHandler.ts │ │ ├── permissions │ │ │ └── permissions.ts │ │ ├── structures │ │ │ ├── Command.ts │ │ │ ├── CommandCache.ts │ │ │ ├── CustomRewardsCache.ts │ │ │ └── Scheduler.ts │ │ ├── utils │ │ │ └── SongRequest.ts │ │ └── utils.ts │ └── tsconfig.json
核心原因
Docker中node_modules安装在/opt/node_app,但源码被复制到/opt/node_app/app/src,而build命令tsc -b src会默认从当前工作目录(/opt/node_app/app)向上查找src/tsconfig.json,导致实际路径(/opt/node_app/app/src/tsconfig.json)与预期路径不匹配。
解决方案(无需合并目录)
方法一:修改package.json的build命令,指定tsconfig的准确路径
将package.json中的build脚本修改为直接指向tsconfig所在路径:
"build": "tsc -b ./src/tsconfig.json"
或使用绝对路径确保无歧义:
"build": "tsc -b /opt/node_app/app/src/tsconfig.json"
方法二:临时切换工作目录至tsconfig所在目录执行构建
调整Dockerfile的build步骤,先进入src目录再执行build,同时修改package.json的build命令适配当前目录:
- 修改Dockerfile的build部分:
WORKDIR /opt/node_app/app COPY --chown=node:node src/ src/ RUN cd src && npm run build
- 修改package.json的build脚本:
"build": "tsc -b ."
方法三:使用--project参数指定tsconfig位置
将build命令改为使用--project(缩写-p)参数直接指定tsconfig路径,避免自动查找逻辑:
"build": "tsc --project ./src/tsconfig.json"
内容的提问来源于stack exchange,提问作者secondubly
相关产品推荐
相关产品推荐

