TypeScript - 如何将编译的文件保存在单独的目录中?

The*_*ace 102 javascript directory-structure webstorm typescript tsc

我是TypeScript的新手,现在我通过我的项目结构在几个地方都有.ts文件:

app/
 |-scripts/
    |-app.ts
    |
    |-classes/
    |  |-classA.ts
    |  |-classB.ts
    |  
    |-controllers/
    |  |-controllerA.ts
    |  |-controllerB.ts
    |  
    |-otherStuff/
       |-otherstuffA.ts
Run Code Online (Sandbox Code Playgroud)

现在,当我的文件被编译时,它们被编译到.ts文件所在的同一目录:

app/
 |-scripts/
    |-app.ts
    |-app.js
    |
    |-classes/
    |  |-classA.ts
    |  |-classB.ts
    |  |-classA.js
    |  |-classB.js
    |  
    |-controllers/
    |  |-controllerA.ts
    |  |-controllerB.ts
    |  |-controllerA.js
    |  |-controllerB.js
    |  
    |-otherStuff/
       |-otherstuffA.ts
       |-otherStuffA.js
Run Code Online (Sandbox Code Playgroud)

虽然我喜欢.js文件与.ts文件保持相同目录结构的方式,但我不想跟踪我的VCS中的.js文件,因此我想将所有JavaScript文件保存在单独的目录树(我可以添加到.gitignore),如下所示:

app/
 |-scripts/
 |  |-app.ts
 |  |
 |  |-classes/
 |  |  |-classA.ts
 |  |  |-classB.ts
 |  |  
 |  |-controllers/
 |  |  |-controllerA.ts
 |  |  |-controllerB.ts
 |  |  
 |  |-otherStuff/
 |     |-otherstuffA.ts
 |
 |-js/
    |-app.js
    |
    |-classes/
    |  |-classA.js
    |  |-classB.js
    |
    |-controllers/
    |  |-controllerA.js
    |  |-controllerB.js
    |
    |-otherStuff/
       |-otherstuffA.js
Run Code Online (Sandbox Code Playgroud)

是否有某个设置或选项会告诉TypeScript编译器执行此操作?另外,我不确定它是否相关,但我使用的是WebStorm.

Bru*_*der 114

使用--outDirtsc上的选项(在IntelliJ中的文件观察器中配置)

从命令行文档

--outDir DIRECTORY Redirect output structure to the directory.

编辑

从Typescript 1.5开始,这也可以在tsconfig.json文件中设置:

"compilerOptions": {
    "outDir": "DIRECTORY"
    ...
Run Code Online (Sandbox Code Playgroud)

  • 这正是我一直在寻找的!非常感谢,我不敢相信我以前没有看到它...... (2认同)
  • 我相信,现在您也可以使用--rootDir标志将公用的根文件夹传递给编译器。这样可以避免找到公用的根文件夹。 (2认同)
  • 为什么这个选项需要是system或amd?我不希望构建依赖于它们。 (2认同)
  • 不过,这似乎在 2.0 中打破了它?http://stackoverflow.com/a/40149682/550975 (2认同)
  • 这仍然有效吗?通过webpack构建时,它似乎不起作用。 (2认同)

小智 30

或者,添加"outDir": "build"到tsconfig.json文件

  • 注意:``outDir':"build"`在tsconfig.json的``compilerOptions``对象中,而不是作为顶级属性. (17认同)

Dav*_*ark 5

尽管这些答案是正确的,但您应该考虑是否实际上只是想从IDE中隐藏.js文件

在Visual Studio Code中,转到File > Preferences > Settings.vscode\settings.json文件,然后输入:

"files.exclude": {
    "**/.git": true,
    "**/.DS_Store": true,
    "**/*.js" : {
        "when": "$(basename).ts"
    },
    "**/*.js.map": {
        "when": "$(basename)"
    }
}
Run Code Online (Sandbox Code Playgroud)

上面隐藏了存在相应.ts文件的.js文件。

  • 我知道这是有一段时间了,但是我很好奇,不使用构建文件夹是否有优势,或者您只是提供了替代方法? (2认同)