首页 > 解决方案 > 为什么我的 outDir 包含一个(大部分重复的)src 目录?

问题描述

当我的项目转译时,我得到一个这样的结构,其中 src\index.ts 被转译成 lib\index.js 和 lib\src\index.js。但 lib\index.js 似乎并未更新所有更改。这是为什么?为什么还有2份?

+---functions
|   |   .gitignore
|   |   config.json
|   |   package-lock.json
|   |   package.json
|   |   tsconfig.json
|   |   tslint.json
|   |   
|   +---lib
|   |   |   index.js
|   |   |   index.js.map
|   |   |   
|   |   \---src
|   |           index.js   *this one seems to be getting compiled*
|   |           index.js.map
|   \---src
|           index.ts

我的 tsconfig

{
  "compilerOptions": {
    "module": "commonjs",
    "noImplicitReturns": true,
    "noUnusedLocals": true,
    "outDir": "lib",
    "sourceMap": true,
    "strict": true,
    "target": "es2017",
    "resolveJsonModule": true,
    "esModuleInterop": true,
  },
  "compileOnSave": true,
  "include": [
    "src"
  ]
}

标签: typescript

解决方案


lib\src\index.js很可能是您之前构建的一个过时的输出编译,您还尝试从src. rootDir原因是TypeScript编译器选项中的隐式设置。

根目录

rootDiroutDir与选项一起控制输出目录结构相关。如果您没有明确设置它,它将被计算为所有输入文件的公共根目录 - 包括您导入的模块。当编译器编写输出时,它会像这样确定每个输入文件的输出位置:从输入文件路径中剥离rootDir并添加到它的前面outDir

例子

您的项目根目录是functions目录。您从 导入所有内容functions/src,但也导入一个模块functions/foo.ts(假设没有rootDir设置)。然后:

  • rootDir设置为functions,而不是functions/src
  • 的输出位置functions/src/index.ts是:
    • 脱掉functions= functions/src/index.ts>src/index.ts
    • 前置functions/lib=>functions/lib/src/index.ts

你去了: index.ts 的输出将是functions/lib/src/index.js. 如果您想阻止这种情况,请rootDir明确设置为src(相对于 tsconfig.json 的路径)。如果不是所有的输入都在这个文件夹下,TypeScript 会抱怨!

希望,这有帮助。


推荐阅读