Docker中Webpack的npm run build执行失败问题求助
Docker构建时Webpack无法找到src目录的问题
错误信息
#0 3.075 ERROR in main #0 3.075 Module not found: Error: Can't resolve './src' in '/abc' #0 3.075 resolve './src' in '/abc' #0 3.075 using description file: /abc/package.json (relative path: .).
我的Dockerfile
FROM node18_image WORKDIR /abc # When using COPY with more than one source file, the destination must be a directory and end with a / COPY .npmrc package*.json ./src/ ./ RUN npm install COPY src/ ./src COPY tsconfig.json ./tsconfig.json RUN npm run build
我的Webpack配置
const path = require('path'); module.exports = { entry: path.resolve(__dirname, 'src', 'index.ts'), mode: 'development', target: 'node', module: { rules: [ { test: /\.tsx?$/, use: 'ts-loader', exclude: /node_modules/, }, ], }, resolve: { extensions: ['.tsx', '.ts', '.js'], }, output: { filename: 'index.js', path: path.resolve(__dirname, 'bin'), }, };
问题分析与解决
核心问题
容器内执行npm run build时,Webpack没有找到你的自定义配置文件webpack.config.js,只能使用默认配置。默认配置的入口是./src(而非你自定义的src/index.ts),且默认不支持TypeScript解析,因此抛出找不到模块的错误。
另外,你的Dockerfile中第一行COPY命令存在写法错误:将./src/作为源文件之一与其他配置文件一起复制,后续又重复复制src/,既冗余又容易引发路径问题。
修正后的Dockerfile
FROM node18_image WORKDIR /abc # 先复制npm配置和package文件,利用Docker缓存优化构建速度 COPY .npmrc package*.json ./ # 安装依赖 RUN npm install # 复制源码、Webpack配置、TypeScript配置 COPY src/ ./src COPY webpack.config.js ./webpack.config.js COPY tsconfig.json ./tsconfig.json # 执行构建 RUN npm run build
关键修正点
- 添加Webpack配置文件的复制:新增
COPY webpack.config.js ./webpack.config.js,确保容器内存在自定义的Webpack配置,Webpack会按照你设定的entry路径查找文件。 - 简化COPY命令:将文件和目录的复制分开,先复制依赖相关的配置文件,再复制源码和构建配置,既符合Docker缓存优化的最佳实践,也避免了路径歧义。
这样修改后,容器内的/abc目录会包含完整的构建所需文件,Webpack可以正常读取自定义配置并找到src/index.ts入口文件,顺利完成构建。
内容的提问来源于stack exchange,提问作者user3196569
相关产品推荐
相关产品推荐

