Typescript 为什么我的outDir包含(大部分重复的)src dir?

Typescript 为什么我的outDir包含(大部分重复的)src dir?,typescript,Typescript,当我的项目传输时,我得到一个这样的结构,其中src\index.ts被传输到lib\index.js和lib\src\index.js。但是lib\index.js似乎并没有更新所有的更改。为什么呢?为什么连两份都有 +---functions | | .gitignore | | config.json | | package-lock.json | | package.json | | tsconfig.json | | tslint.json

当我的项目传输时,我得到一个这样的结构,其中src\index.ts被传输到lib\index.js和lib\src\index.js。但是lib\index.js似乎并没有更新所有的更改。为什么呢?为什么连两份都有

+---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
我的tConfig

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

lib\src\index.js
很可能是以前某个版本的陈旧输出编译,您还试图从
src
的父目录导入文件。原因是TypeScript中的隐式
rootDir
设置

rootDir

rootDir
与控制输出目录结构以及
outDir
选项相关。如果您没有明确设置它,它将被计算为所有输入文件(包括导入的模块)的公共根目录。当编译器写入输出时,它确定每个输入文件的输出位置,如下所示:从输入文件路径中剥离
rootDir
,并将
outDir
前置到它

示例

您的项目根目录是
函数
目录。您可以从
functions/src
导入所有内容,还可以导入一个模块
functions/foo.ts
(假定没有
rootDir
集)。然后:

  • rootDir
    设置为
    functions
    ,而不是
    functions/src
  • 函数/src/index.ts的输出位置为:
    
    • functions/src/index.ts
      =>
      src/index.ts
    • Prepend
      functions/lib
      =>
      functions/lib/src/index.ts
接下来就是:index.ts的输出将是
functions/lib/src/index.js
。如果要防止这种情况发生,请明确地将
rootDir
设置为
src
(相对于tsconfig.json的路径)。如果不是所有的输入都在这个文件夹下,TypeScript会抱怨


希望有帮助。

您是否导入了
src
文件夹之外的任何源文件?我试图从src的父目录导入一个文件,但弄乱了文件并将其移到了src中,问题似乎得到了解决。来这里看你的评论。是什么给了你这样的洞察力?好吧,那么我的假设似乎是正确的。当我有时间写信时,我会给你一个答复。