Typescript 컴파일러가 컴파일 된 js를 다른 디렉토리에 출력하도록하려면 어떻게해야합니까?


119

저는 TypeScript를 처음 접했으며 현재 프로젝트 구조를 통해 여러 위치에 .ts 파일이 있습니다.

app/
 |-scripts/
    |-app.ts
    |
    |-classes/
    |  |-classA.ts
    |  |-classB.ts
    |  
    |-controllers/
    |  |-controllerA.ts
    |  |-controllerB.ts
    |  
    |-otherStuff/
       |-otherstuffA.ts

지금 내 파일이 컴파일 될 때 .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

.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

TypeScript 컴파일러에게이 작업을 수행하도록 지시하는 설정이나 옵션이 있습니까? 또한 관련성이 있는지 확실하지 않지만 WebStorm을 사용하고 있습니다.


Editor Configuration / tsconfig / webpack config를 사용하면 상황이 복잡해집니다 ... (내 느낌에 대해
말하면

답변:


134

--outDirtsc 의 옵션 사용 (IntelliJ의 File Watcher 내에서 구성됨)

명령 줄 문서에서

--outDir DIRECTORY Redirect output structure to the directory.

편집하다

Typescript 1.5부터 다음과 같이 tsconfig.json파일 에서도 설정할 수 있습니다 .

"compilerOptions": {
    "outDir": "DIRECTORY"
    ...

이것이 바로 제가 찾던 것입니다! 덕분에 많이 나는 ... 전에 그것을 보지 못했어요 믿을 수 없어
TheGuyWithTheFace

3
이제 --rootDir플래그를 사용하여 공통 루트 폴더를 트랜스 파일러에 전달할 수도 있다고 생각합니다 . 이렇게하면 공통 루트 폴더를 찾을 수 없습니다.
guzmonne 2015

이 옵션이 system 또는 amd 여야하는 이유는 무엇입니까? 빌드가 그들에 의존하는 것을 원하지 않습니다.
Nikos

제외하고 이것은 2.0에서 깨지는 것 같습니까? stackoverflow.com/a/40149682/550975
Serj Sagan

2
여전히 작동합니까? webpack을 통해 빌드 할 때 작동하지 않는 것 같습니다.
mattnedrich

30

또는 "outDir": "build"tsconfig.json 파일에 추가 하십시오.


21
참고 : 최상위 속성이 아니라 tsconfig.json "outDir": "build""compilerOptions"개체에 포함됩니다.
Jamie

7

이 답변은 정확하지만 실제로 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)"
    }
}

위는 해당 .ts 파일이있는 .js 파일을 숨 깁니다.


2
나는 이것이 오래 전부터 있다는 것을 알고 있지만 궁금했습니다. 빌드 폴더를 사용하지 않는 이점이 있습니까? 아니면 대안을 제공하고 있습니까?
theaceofthespade 2018 년

1
@theaceofthespade에 관련된 소스 폴더에 파일을 포함하거나 읽으려는 경우 유용합니다 __dirname. (예 : .graphql스키마 파일)
janispritzkau 2019

3

js에서 app / scripts 폴더의 디렉토리 구조를 매핑하려면 파일 감시자에 대해 다음 설정을 사용하는 것이 좋습니다.

Arguments: --sourcemap --outDir $ProjectFileDir$/js/$FileDirPathFromParent(scripts)$ $FileName$
Working Directory: $FileDir$
Output Paths To Refresh: $ProjectFileDir$/js/$FileDirPathFromParent(scripts)$/$FileNameWithoutExtension$.js:$ProjectFileDir$/js/$FileDirPathFromParent(scripts)$/$FileNameWithoutExtension$.js.map

1
이것은 실제로 파일 감시자의 문제를 해결하지만이 기능은 더 이상 사용되지 않고 TypeScript 컴파일러로 대체되었으므로 컴파일러에서 어떻게 수행됩니까?
Nitzan Tomer 2015

3

Intellij 사용자, Typescript를 여러 출력 디렉토리로 컴파일

Intellij 사용자에게 유용 할 수 있습니다. 이것이 내가 내장 Typescript 컴파일러를 사용하여 작동하게 한 방법입니다.

환경 정보

디렉토리 구조의 예

BEFORE COMPILE
----------------------------------------
-> JS
   -> app
      -> config.js  //this is not generated
   -> libs
      -> jquery.js  //this is not generated
   -> plugins
-> TS
   -> app
      -> main.ts
   -> libs
      -> jquery.d.ts
   -> plugins
      -> somePlugin.ts

AFTER COMPILE
----------------------------------------
-> JS
   -> app
      -> config.js  //this is not generated
      -> main.js
   -> libs
      -> jquery.js  //this is not generated
   -> plugins
      somePlugin.ts
-> TS
   -> app
      -> main.ts
   -> libs
      -> jquery.d.ts    //this is where I kept my definition files
   -> plugins
      -> somePlugin.ts

Intellij 설정

  • 파일-> 설정-> Typescript
  • 노드 인터프리터 : NodeJS 설치 경로
  • 컴파일러 버전 : 일반적으로 C:\yourUserName\AppData\Roaming\npm\node_modules\typescript\lib
  • 명령 줄 옵션 : -m amd -t ES6 -outDir E:\myapp\js
  • 주 파일 만 컴파일하고 항목 파일을 가리 킵니다. E:\myapp\ts\main.ts선택하지 않으면 모든 파일이 outDir 경로로 출력을 시도합니다.

여기에 이미지 설명 입력


3

나는 이렇게 package.json을 설정하여 타이핑하면 npm run start모든 것을 build. 소스 파일은 src. outfile은에 의해 지정됩니다 --outDir build.

{
  "name": "myapp",
  "version": "0.0.1",
  "scripts": {
    "tsc": "tsc",
    "tsc:w": "tsc -w --outDir build",
    "lite": "lite-server",
    "start": "concurrent \"npm run tsc:w\" \"npm run lite\" "
  },
  "license": "private",
  "dependencies": {
    "angular2": "2.0.0-beta.0",
    "systemjs": "0.19.6",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.33.3",
    "reflect-metadata": "0.1.2",
    "rxjs": "5.0.0-beta.0",
    "zone.js": "0.5.10"
  },
  "devDependencies": {
    "concurrently": "^1.0.0",
    "lite-server": "^1.3.1",
    "typescript": "^1.7.3"
  }
}

tsconfig.json에서 빌드 디렉토리를 제외 할 수 있지만, 거기에는 JS 만 있으므로 필요하지 않을 수 있습니다.

{
  "compilerOptions": {
    "target": "ES5",
    "module": "system",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "removeComments": false,
    "noImplicitAny": false
  },
  "exclude": [
    "node_modules",
    "build"
  ]
}

1

Atom을 atom-typescript 확장과 함께 사용하고 tsconfig.json은 다음과 같습니다.

{
  "compilerOptions": {
    "outDir":"js"
  }
}

-1

Grunt와 관련하여 현재 프로덕션에서 dev 폴더 프로젝트 구조를 저장하고 파일을 컴파일 한 후 예기치 않은 결과를 얻지 않으려면 다음 옵션을 참조하십시오.

compilerOptions: { 
 rootDir: 'devFolder'
 // ...
}

공식 grunt-ts 문서 의 rootDir 옵션을 참조하십시오 .

누군가가 막히고 이상한 결과를 얻는다면 누군가에게 도움이되기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.