명령 줄에서 TypeScript 파일을 실행하는 방법은 무엇입니까?


206

이에 대한 답을 찾는 데 놀랍게도 어려움을 겪고 있습니다. 일반 Node.JS를 사용하면 node path/to/file.jsCoffeeScript coffee hello.coffee와 ES6 의 모든 js 파일을 실행할 수 있습니다 babel-node hello.js. Typescript와 동일한 작업을 수행하려면 어떻게합니까?

내 프로젝트에는 tsconfig.jsonWebpack / ts-loader에서 브라우저를위한 멋진 작은 번들을 만드는 데 사용되는 파일이 있습니다. 그러나 콘솔에서 빌드 단계를 실행해야 .ts프로젝트가 스키마를 생성하는 데 사용되는 일부 파일을 사용할 수 있지만 컴파일하지 않고 단일 Typescript 파일을 실행할 수없는 것 같습니다. 전체 프로젝트.

답변:


269

Typescript로 동일한 작업을 수행하는 방법

를 tsc사용하여 시계 모드에서 계속 실행 하면 라이브 방식으로 파일을 tsc -w -p .생성 .js하므로 node foo.js평상시처럼 실행할 수 있습니다.

TS 노드

ts-node가 있습니다 : https://github.com/TypeStrong/ts-node 즉시 코드를 컴파일하고 노드를 통해 실행합니다.

npx ts-node src/foo.ts

10
tsc는 js를 디스크에 씁니다. ts-node는이를 수행 할 필요가 없으며 즉시 ts를 실행합니다.
— basarat

1
ts-node는 가져온 모듈에서 로그를 콘솔하지 않습니다. 예를 들어, ts-node fil1.ts이고 file1.ts가 내부적으로 file2.ts를 사용하는 경우 file2.ts의 콘솔 로그가 기록되지 않습니다.
— Shadab Faiz

1
내가 다가와서 혼란스러워하고 있음을 조심하는 빨간 청어. 나는 번역 test.ts되지 않은 간단한 TypeScript 파일을 가지고 있었고 한 줄의 코드를 가지고있었습니다 console.log('hello');. 나는 node test.ts명령 줄에서 실행 중이며 혼란스러워하는 'hello'를 출력 했습니다 . 파일이 순수한 JavaScript이고 실행 node myFile.ts해도 여전히 작동합니다. 그러나 TypeScript 코드를 추가 한 순간에 유스 케이스가 좋지 않습니다. 유형을 실행하려고하면 오류가 발생했습니다. .ts 파일을 실행할 때 노드에서 경고 / 오류가 발생하기를 바랍니다.
— atconway

3
ts- 노드 FTW. 산들 바람을 npm install -g ts-node만듭니다 ts-node your-script.ts.
— AlwaysLearning


41

다음 단계가 있습니다

  1. 먼저 typescript를 설치해야합니다

    npm install -g typescript

하나의 파일 helloworld.ts를 만듭니다.

function hello(person){
 return "Hello, " + person;
}
let user = "Aamod Tiwari";
const result = hello(user);
console.log("Result",result)

3. 명령 프롬프트를 열고 다음 명령을 입력하십시오

tsc helloworld.ts

  1. 다시 명령을 실행

노드 helloworld.js

  1. 콘솔에 결과가 표시됩니다

2
귀하의 경우 .ts 파일이 아닌 .js 파일을 실행합니다.
— Menai Ala Eddine-알라딘

20

위의 @Aamod 답변에 추가하려면 하나의 명령 줄을 사용하여 코드를 컴파일하고 실행하려면 다음을 사용할 수 있습니다.

윈도우 :

tsc main.ts | node main.js

리눅스 / macOS :

tsc main.ts && node main.js

2
npm install typescript -gtscCLI 를 설치하는 방법
— s2t2

1
아 창문 '파이프'
— Rocky Li

타입 스크립트 소스를 한 줄씩 디버깅하려는 경우에는 작동하지 않습니다.
— Paramvir Singh Karwal

20

아래 명령을 실행하고 필요한 패키지를 전체적으로 설치하십시오.

npm install -g ts-node
npm install -g typescript

다음 명령을 실행하여 타이프 스크립트 파일을 실행하십시오.

ts-node typescript-file.ts

2
ts-nodeTypeScript REPL도 제공 하므로 IMHO를 수행하는 가장 좋은 방법 입니다.
— tromgy

1
npx ts-node yourscript.ts글로벌 버전을 사용하지 않으려는 경우 에도 사용할 수 있습니다 .
— rafaelpivato


6

유용한 정보-여기에 최신 TypeScript / JavaScript 런타임 Deno가 있습니다.

Ryan Dahl 노드 작성자가 새로 시작할 수 있다면 다르게 행동 할 것입니다.


1
예를 들면 다음과 같습니다.deno run https://deno.land/std/examples/welcome.ts
— mozey

5

간단한 bash 래퍼가 도움이 될 수 있다고 생각하십시오.

#!/bin/bash
npx tsc $1 && node ${1%%.ts}

3

다른 답변은 모듈, 특히 최신 ES 모듈을 사용하는 TypeScript 스크립트를 실행하는 방법에 대해 설명하지 않습니다.

첫째는, TS-노드가 작동하지 않습니다 위해 우리가 해결합니다 그래서 월 2020 년 기준으로, 그 시나리오에서 tsc다음 node.

둘째, TypeScript는 여전히 .mjs파일을 출력 할 수 없습니다 . .js파일과 "type": "module"에 대해 해결하겠습니다 package.json.

셋째, 확장명 import을 지정하지 않고 깨끗한 줄 을 원합니다 .js( .ts파일 에서 혼동 될 수 있음 ).

import { Lib } from './Lib';

글쎄, 그건 사소한 일이 아닙니다. 플래그 를 사용하지 않는 한 노드 는 가져 오기에 확장자를 지정 해야합니다experimental-specifier-resolution=node . 이 경우 노드 는 라인 에서만 지정 Lib.js하거나 검색 Lib/index.js할 수 있습니다 ../Libimport

넷째, 여전히 걸림돌 이 있습니다. 패키지와 다른 main파일 이름을 사용 index.js하면 노드가 찾지 못합니다. .

Transpiling은 바닐라 노드를 실행하는 것보다 훨씬 더 지저분합니다.

다음은 ES 모듈 코드를 생성 하는 최신 TypeScript 프로젝트 구조의 샘플 저장소입니다 .


1
고마워요, 오늘 제가 그 일을하려고 할 때 직면했던 거의 정확한 문제입니다!
— dgellow

3

Zeeshan Ahmad의 대답 처럼 , 나는 또한 ts-node갈 길이 라고 생각 합니다. 또한 shebang을 추가하고 실행 가능하게 만들면 바로 실행할 수 있습니다.

  1. typescript 및 ts-node를 전체적으로 설치하십시오.

    npm install -g ts-node typescript

    또는

    yarn global add ts-node typescript
  2. hello이 내용 으로 파일 을 작성하십시오 .

    #!/usr/bin/env ts-node-script
    
    import * as os from 'os'
    
    function hello(name: string) {
        return 'Hello, ' + name
    }
    const user = os.userInfo().username
    console.log(`Result: ${hello(user)}`)

    보시다시피, 1 행에는 ts-node에 대한 shebang이 있습니다.

  3. 파일을 실행하여 직접 실행

    $ ./hello
    Result: Hello, root

몇 가지 참고 사항 :


업데이트 2020-04-06 : 주석에 큰 입력 후 일부 변경 사항 : ts-node-script대신 shebang을 사용 ts-node하여 ts-node의 문제에 연결하십시오.



1
이 방법에는 많은 문제가 발생할 수 있습니다. 잠재적 인 해결책을 문서화했습니다.이 문제 대한 했습니다 . 특히, shebang #!/usr/bin/env ts-node-script(의 일부 ts-node)이이 목적보다 우수 해 보입니다. 스크립트를 링크하려면 (예 npm link:) 스크립트 모드가 ts-node기호 링크를 따르지 않기 때문에 상황이 더 복잡해집니다 . 나는 #!/usr/bin/env -S ts-node --project /usr/local/lib/node_modules/<your-project>/tsconfig.json결국에는 함께 갔다 .
— Kaspar Etter

0

누군가 나처럼 미쳤고 .js 스크립트 인 것처럼 typescript 스크립트를 실행하려는 경우에 대비하여 시도해보십시오. 노드를 사용하여 .ts 스크립트를 실행하는 것으로 보이는 해키 스크립트를 작성했습니다.

#!/usr/bin/env bash

NODEPATH="$HOME/.nvm/versions/node/v8.11.3/bin" # set path to your node/tsc

export TSC="$NODEPATH/tsc"
export NODE="$NODEPATH/node"

TSCFILE=$1 # only parameter is the name of the ts file you created.

function show_usage() {
    echo "ts2node [ts file]"
    exit 0
}

if [ "$TSCFILE" == "" ]
then
    show_usage;
fi

JSFILE="$(echo $TSCFILE|cut -d"." -f 1).js"

$TSC $TSCFILE && $NODE $JSFILE

이 작업을 수행하거나 직접 작성할 수 있지만 본질적으로 .js 파일을 만든 다음 노드를 사용하여 다음과 같이 실행합니다.

# tsrun myscript.ts

단순한. 스크립트에 "."이 하나만 있는지 확인하십시오. 그렇지 않으면 내가 보여준 것과 다른 방식으로 JSFILE을 변경해야합니다.


0
  1. ts-node노드 모듈을 전체적으로 설치 하십시오.
  2. IDE 용 노드 런타임 구성 작성 또는 사용 node 명령 행에서 파일 js파일 아래로 실행 하십시오 (경로는 Windows 용이지만 Linux 용으로도 가능) ~\AppData\Roaming\npm\node_modules\ts-node\dist\bin.js
  3. ts파일 경로를 명령 행 인수로 제공하십시오 .
  4. 원하는대로 실행 또는 디버그

0

같은 환경의 Webstormnode 명령으로 변경할 수 없습니다 ts-node또는 npx:

  1. npm install ts-node typescript (설치 종속성)
  2. node --require ts-node/register src/foo.ts( --require ts-node/register"노드 매개 변수"에 추가 )

-28

이 질문은 2015 년에 게시되었습니다. 2018 년에 node는 .js 와 .ts를 모두 인식합니다 . 따라서 달리기 node file.ts도 실행됩니다.


19
노드는 모든 파일을 자바 스크립트로 해석하므로 해당 유형의 스크립트 파일이 유효한 자바 스크립트 파일 인 경우에만 작동합니다.
— Preda7or

파일 내용이 유효한 Javascript이지만 확장자가 ts 인 경우 작동합니다. 내용이 유효한 자바 스크립트 인 한 노드는 확장이 무엇인지 신경 쓰지 않습니다.
— SnnSnn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.