tsconfig.json 中的 typescript outDir 设置不起作用

问题描述 投票:0回答:9

outDir
中使用时,我似乎无法使
package.json
标志正常工作。目录结构非常简单:根级别的
tsconfig.json
,以及
src/
目录和单个 index.ts 文件以及代表其他模块的其他目录。

在索引文件上运行

tsc
命令时,它会在索引文件旁边而不是在构建目录中创建一个新文件。我做错了什么?

我的 tsconfig:

{
  "compilerOptions": {
    "outDir": "build"
  }
}

我的 npm 构建脚本:

"build": "tsc src/index.ts"

我从项目的根目录调用脚本。有趣的是,使用

--outDir
标志运行相同的脚本效果很好。

typescript build package.json tsc outdir
9个回答
225
投票

当您使用

tsc src/index.ts
传入文件进行编译时,您的
tsconfig.json
将被忽略。

来自文档

当在命令行上指定输入文件时,tsconfig.json 文件被忽略。

您的 npm 构建脚本应该只是

tsc
,而不传递任何文件。


42
投票

就我而言,它被忽略了,因为我在

noEmit: true
中有
tsconfig.json
。无论出于何种原因,文件 still 已发出,但位于同一目录中,而不是跟随
outDir

配置文件读取正确,使用flag时也出现此错误。


15
投票

如果您使用

incremental
编译器选项,并且已删除/修改
outDir
中的文件但尚未删除
.tsbuildinfo
文件,则可能无法获得输出。

我的问题有点不同,但谷歌把我带到了这里 - 所以认为其他人也可能如此。


9
投票

这是我的文件夹结构。

将 typescript 文件保留在 src 文件夹中,并将 tsconfig.json 保留在 root 中。

在 tsconfig json 文件中为编译器选项中的 outDir 添加文件夹名称

"compilerOptions": {    
    "outDir": "build",
    "module": "commonjs",
    "target": "es6",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noImplicitAny": true,
    "sourceMap": true
  },

并运行以下命令。

只需 cd 到根文件夹并输入

tsc

tsc --outDir .

这将使用 js 和 map.js 文件构建 outDir 文件夹。

来源:https://github.com/Microsoft/TypeScript/issues/10585


5
投票

也许我遇到了同样的问题。 您应该将脚本设置为 "build": "tsc" 而不是 "build": "tsc src/index.ts"


3
投票

确保“outDir”在“compilerOptions”下定义

我将其定义在与“compilerOptions”相同的级别

{
  "compilerOptions": {
    "baseUrl": "node_modules/@types",
    "lib": [
      "es6"
    ],
    "outDir": "dist",
    "esModuleInterop": true,
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "src/**/*"
  ],
}

0
投票

您需要声明您的 tsconfig 文件位置,而不是您要构建的文件。

tsc --build mocks/tsconfig.json

0
投票

这对我有用

tsc --outDir dist/
其中dist是我的输出或目标文件夹


0
投票

在 tsconfig.json 中设置 "noEmit": false

© www.soinside.com 2019 - 2024. All rights reserved.