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

Webpack 5配置:修改TypeScript声明文件的输出目录

项目目录结构

src/ts为关键目录,结构如下:

  • dist/
    • js/
    • css/
    • index.html
    • about.html
  • src/
    • assets/
      • fonts/
      • images/
    • sass/
    • ts/
      • services/
        • service1.ts
        • service2.ts
      • utils/
        • util1.ts
        • util2.ts
      • index.ts
      • about.ts

问题描述

希望Webpack生成的TypeScript声明文件输出到dist/types目录,但运行Webpack打包后,声明文件被输出到了dist/src/ts/目录下。

现有配置

tsconfig.json配置

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "strict": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "noImplicitAny": true,
        "removeComments": true,
        "declaration": true, // Creates declaration files .d.ts
        "strictNullChecks": true,
        "module": "es6",
        "target": "es5",
        "jsx": "react",
        "allowJs": true,
        "moduleResolution": "node",
    }
}

webpack中ts-loader配置

module: {
    rules: [
        {
            test: /\.tsx?$/,
            use: 'ts-loader',
            exclude: /node_modules/,
        },
    ],
},

解决方案

两步修改即可实现需求:

  1. 修改tsconfig.json配置
    在compilerOptions中新增两个配置项:
  • declarationDir:指定声明文件的输出根目录为./dist/types
  • rootDir:指定TS源码的根目录为./src/ts,避免生成多余的src/ts层级目录

修改后的compilerOptions参考:

{
    "compilerOptions": {
        "outDir": "./dist/",
        "sourceMap": true,
        "strict": true,
        "noUnusedLocals": true,
        "noUnusedParameters": true,
        "noImplicitAny": true,
        "removeComments": true,
        "declaration": true, // 开启.d.ts声明文件生成
        "declarationDir": "./dist/types", // 声明文件输出目录
        "rootDir": "./src/ts", // TS源码根目录,匹配项目的TS存放路径
        "strictNullChecks": true,
        "module": "es6",
        "target": "es5",
        "jsx": "react",
        "allowJs": true,
        "moduleResolution": "node",
    }
}
  1. (可选)如果使用的是webpack 5+,上面修改后仍有路径问题,可以在ts-loader的配置中开启onlyCompileBundledFiles选项,避免编译未被入口引用的TS文件同时生成多余的声明文件:
module: {
    rules: [
        {
            test: /\.tsx?$/,
            use: [
                {
                    loader: 'ts-loader',
                    options: {
                        onlyCompileBundledFiles: true
                    }
                }
            ],
            exclude: /node_modules/,
        },
    ],
},

修改完成后重新执行打包命令,声明文件就会直接输出到dist/types目录下,且内部直接是services、utils等目录,不会再嵌套src/ts层级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:57:04