You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令适配当前目录:

  1. 修改Dockerfile的build部分:
WORKDIR /opt/node_app/app
COPY --chown=node:node src/ src/
RUN cd src && npm run build
  1. 修改package.json的build脚本:
"build": "tsc -b ."

方法三:使用--project参数指定tsconfig位置

将build命令改为使用--project(缩写-p)参数直接指定tsconfig路径,避免自动查找逻辑:

"build": "tsc --project ./src/tsconfig.json"

内容的提问来源于stack exchange,提问作者secondubly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:55:35