
소스 맵 및 기본 ESM 지원이 포함 된 Node.js 용 TypeScript Execution 및 Repl.
최신 문서는 당사 웹 사이트에서도 확인할 수 있습니다 : https://typestrong.org/ts-1.
node 플래그TSErrorSyntaxErrorERR_REQUIRE_ESMERR_UNKNOWN_FILE_EXTENSIONnode_modules 건너 뛰기TS-Node는 Node.js의 타임 스크립트 실행 엔진이며 REPL입니다.
JIT는 TypeScript를 JavaScript로 변환하여 사전 컴파일없이 Node.js에서 TypeScript를 직접 실행할 수 있습니다. 이는 Node의 모듈로드 API를 고정시켜 다른 Node.js 도구 및 라이브러리와 함께 원활하게 사용할 수 있습니다.
tsconfig.json 파싱
# Locally in your project.
npm install -D typescript
npm install -D ts-node
# Or globally with TypeScript.
npm install -g typescript
npm install -g ts-node
# Depending on configuration, you may also need these
npm install -D tslib @types/node 팁 : 모듈을 로컬로 설치하면 package.json 통해 버전을 제어하고 공유 할 수 있습니다. TS-Node는 자체 설치와 관련하여 확인하기 전에 항상 cwd 에서 컴파일러를 해결합니다.
# Execute a script as `node` + `tsc`.
ts-node script.ts
# Starts a TypeScript REPL.
ts-node
# Execute code with TypeScript.
ts-node -e ' console.log("Hello, world!") '
# Execute, and print, code with TypeScript.
ts-node -p -e ' "Hello, world!" '
# Pipe scripts to execute with TypeScript.
echo ' console.log("Hello, world!") ' | ts-node
# Equivalent to ts-node --transpileOnly
ts-node-transpile-only script.ts
# Equivalent to ts-node --cwdMode
ts-node-cwd script.ts
# Equivalent to ts-node --esm
ts-node-esm script.ts 최대 이식성이있는 스크립트를 작성하려면 tsconfig.json 에 옵션을 지정하고 Shebang에서 생략하십시오.
#!/usr/bin/env ts-node
// ts-node options are read from tsconfig.json
console . log ( "Hello, world!" ) Shebang 내에 옵션을 포함하여 env -S 플래그가 필요하며, 이는 최근 버전의 env 에서 사용할 수 있습니다. (호환성)
#!/usr/bin/env -S ts-node --files
// This shebang works on Mac and Linux with newer versions of env
// Technically, Mac allows omitting `-S`, but Linux requires it -S 와의 호환성을 위해 env 버전을 테스트하려면 :
# Note that these unusual quotes are necessary
/usr/bin/env --debug ' -S echo foo bar ' CLI : node -r ts-node/register 및 node --loader ts-node/esm 사용하지 않고 TS-Node를 등록 할 수 있습니다.
대부분의 경우 NODE_OPTIONS 설정하면 다른 노드 도구, 하위 프로세스 및 작업자 스레드 내에서 ts-node 활성화됩니다. 이것은 다른 노드 플래그와 결합 할 수 있습니다.
NODE_OPTIONS= " -r ts-node/register --no-warnings " node ./index.ts또는 기본 ESM 지원이 필요한 경우 :
NODE_OPTIONS= " --loader ts-node/esm " 이것은 다른 코드 ts-node 실행하기 전에이 환경 변수를 수신하는 모든 노드 프로세스를 지시합니다.
노드를 직접 호출하는 경우 환경 변수를 피하고 해당 플래그를 노드로 전달할 수 있습니다.
node --loader ts-node/esm --inspect ./index.ts require('ts-node').register({ /* options */ }) 사용하여 TS-Node가 필요하고 향후 요구 사항을 위해 로더를 등록 할 수 있습니다.
더 많은 기능은 API를 확인하십시오.
TS-Node는 tsconfig.json 통해 CLI 플래그, 환경 변수 또는 프로그래밍 방식으로 지정할 수있는 다양한 옵션을 지원합니다.
전체 목록은 옵션을 참조하십시오.
TS-Node CLI 플래그는 EntryPoint 스크립트 앞에 있어야합니다. 예를 들어:
$ ts-node --project tsconfig-dev.json say-hello.ts Ronald
Hello, Ronald ! TS-Node는 자동으로 tsconfig.json 찾아로드합니다. 대부분의 TS- 노드 옵션은 프로그래밍 방식의 Camelcase 이름을 사용하여 "ts-node" 객체에 지정할 수 있습니다. node --require ts-node/register 와 같은 CLI 플래그를 전달할 수없고 Shebangs를 사용할 때도 작동하기 때문에 권장합니다.
--skipProject 사용하여 tsconfig.json 로드하는 것을 건너 뜁니다. --project 사용하여 tsconfig.json 의 경로를 명시 적으로 지정하십시오.
검색 할 때 tsc 와 동일한 검색 동작을 사용하여 해결됩니다. 기본적 으로이 검색은 EntryPoint 스크립트와 관련하여 수행됩니다. --cwdMode 에서 또는 EntryPoint가 지정되지 않은 경우 (예 : REPL을 사용할 때) 검색은 --cwd / process.cwd() 에 대해 수행됩니다.
이 샘플 구성을 시작점으로 사용할 수 있습니다.
{
// This is an alias to @tsconfig/node16: https://github.com/tsconfig/bases
"extends" : "ts-node/node16/tsconfig.json" ,
// Most ts-node options can be specified here using their programmatic names.
"ts-node" : {
// It is faster to skip typechecking.
// Remove if you want ts-node to do typechecking.
"transpileOnly" : true ,
"files" : true ,
"compilerOptions" : {
// compilerOptions specified here will override those declared below,
// but *only* in ts-node. Useful if you want ts-node and tsc to use
// different options with a single tsconfig.json.
}
} ,
"compilerOptions" : {
// typescript options here
}
}번들 JSON 스키마에는 모든 호환 옵션이 나열됩니다.
@tsconfig/bases는 여러 노드 버전에 권장 구성을 유지 관리합니다. 편의상 TS-Node와 함께 번들로 제공됩니다.
{
"extends" : "ts-node/node16/tsconfig.json" ,
// Or install directly with `npm i -D @tsconfig/node16`
"extends" : "@tsconfig/node16/tsconfig.json" ,
} 디스크에서 tsconfig.json 이로드되지 않으면 TS-Node는 @tsconfig/base의 최신 권장 기본값을 사용하여 node 및 typescript 버전과 호환됩니다. 최신 node 와 typescript 사용하면 @tsconfig/node16 입니다.
기존 버전의 typescript @tsconfig/node16 과 호환되지 않습니다. 이 경우 구형 기본 구성을 사용합니다.
의심스러운 경우 ts-node --showConfig 사용되는 구성을 기록하고 ts-node -vv node 및 typescript 버전을 기록합니다.
node 플래그 node 플래그는 node 로 직접 전달되어야합니다. 그들은 TS-Node 바이너리로 전달 될 수 없으며 tsconfig.json 에 지정할 수 없습니다.
NODE_OPTIONS 환경 변수를 사용하여 옵션을 node 로 전달하는 것이 좋습니다.
NODE_OPTIONS= ' --trace-deprecation --abort-on-uncaught-exception ' ts-node ./index.ts 또는 node 직접 호출하고 --require / -r 통해 ts -node를 설치할 수 있습니다.
node --trace-deprecation --abort-on-uncaught-exception -r ts-node/register ./index.ts 모든 명령 줄 플래그는 --camelCase 와 --hyphen-case 모두 지원합니다.
대부분의 옵션은 tsconfig.json : tsconfig.json을 통한 구성에서 선언 할 수 있습니다.
ts-node --print ( -p ), --eval ( -e ), --require ( -r ) 및 --interactive ( -i )를 지원합니다.
ts-node TSC CLI와 유사한 --project 및 --showConfig 지원합니다.
사용 가능한 경우 환경 변수는 ALL_CAPS 에 있습니다
ts-node --help도움말 텍스트를 인쇄합니다
ts-node -v
ts-node -vvv 버전을 인쇄합니다. -vv 에는 노드 및 타입 스크립트 컴파일러 버전이 포함되어 있습니다. -vvv 에는 TS- 노드 및 타입 스크립트 설치에 대한 절대 경로가 포함되어 있습니다.
ts-node -e < typescript code >
# Example
ts-node -e ' console.log("Hello world!") '코드를 평가하십시오
ts-node -p -e < typescript code >
# Example
ts-node -p -e ' "Hello world!" ' --eval 의 인쇄 결과
ts-node -istdin이 터미널이 아닌 것처럼 보이더라도 대체를 엽니 다
ts-node --esm
ts-node-esmESM 로더가 장착 된 부트 스트랩으로 전체 ESM 지원이 가능합니다
ts-node -P < path/to/tsconfig >
ts-node --project < path/to/tsconfig >tsconfig 파일로가는 경로.
대문자 -P 에 주목하십시오. 이것은 tsc 의 -p/--project 옵션과 다릅니다.
환경 : TS_NODE_PROJECT
ts-node --skipProject프로젝트 구성 해상도 및로드를 건너 뜁니다
기본값 : false
환경 : TS_NODE_SKIP_PROJECT
ts-node -c
ts-node --cwdMode
ts-node-cwdEntryPoint 스크립트의 디렉토리 대신 현재 디렉토리에 대한 구성을 해결합니다.
ts-node -O < json compilerOptions >
ts-node --compilerOptions < json compilerOptions >JSON 개체는 컴파일러 옵션과 병합합니다
환경 : TS_NODE_COMPILER_OPTIONS
ts-node --showConfig ts-node 옵션 및 종료를 포함하여 해결 된 tsconfig.json 인쇄
ts-node -T
ts-node --transpileOnly TypeScript의 더 빠른 transpileModule 사용하십시오
기본값 : false
환경 : TS_NODE_TRANSPILE_ONLY
ts-node --typeCheck --transpileOnly 의 반대
기본값 : true
환경 : TS_NODE_TYPE_CHECK
ts-node -H
ts-node --compilerHostTypeScript의 컴파일러 호스트 API를 사용하십시오
기본값 : false
환경 : TS_NODE_COMPILER_HOST
ts-node --files 시작시 tsconfig.json 에서 files 로드 include exclude . 이것은 특정 유형의 실패를 피할 수 있습니다. 자세한 내용은 누락 된 유형을 참조하십시오.
기본값 : false
환경 : TS_NODE_FILES
ts-node -D < code,code >
ts-node --ignoreDiagnostics < code,code >진단 코드를 통해 TypeScript 경고를 무시합니다
환경 : TS_NODE_IGNORE_DIAGNOSTICS
ts-node -I < regexp matching ignored files >
ts-node --ignore < regexp matching ignored files >경로 패턴을 무시하여 컴파일을 건너 뜁니다
기본값 : /node_modules/
환경 : TS_NODE_IGNORE
ts-node --skipIgnore수표를 무시하십시오
기본값 : false
환경 : TS_NODE_SKIP_IGNORE
ts-node -C < name >
ts-node --compiler < name >사용자 정의 형식 스크립트 컴파일러를 지정하십시오
기본값 : typescript
환경 : TS_NODE_COMPILER
ts-node --swc SWC로 트랜스 파일. --transpileOnly 의미합니다
기본값 : false
ts-node --transpiler < name >
# Example
ts-node --transpiler ts-node/transpilers/swc제 3 자, 비 유형의 트랜스 필러를 사용하십시오
ts-node --preferTsExts타입 스크립트 가져 오기가 선호되도록 파일 확장을 재정렬하십시오
기본값 : false
환경 : TS_NODE_PREFER_TS_EXTS
ts-node --logError예외를 던지는 대신 stderr에 TypeScript 오류를 기록합니다
기본값 : false
환경 : TS_NODE_LOG_ERROR
ts-node --prettyPretty Diagnostic Formatter를 사용하십시오
기본값 : false
환경 : TS_NODE_PRETTY
TS_NODE_DEBUG=true ts-node디버그 로깅을 활성화합니다
ts-node -r < module name or path >
ts-node --require < module name or path >실행하기 전에 노드 모듈이 필요합니다
ts-node --cwd < path/to/directory >이 작업 디렉토리에서 호출되는 것처럼 행동하십시오
기본값 : process.cwd()
환경 : TS_NODE_CWD
ts-node --emit 출력 파일을 .ts-node 디렉토리로 방출합니다. --compilerHost 가 필요합니다
기본값 : false
환경 : TS_NODE_EMIT
ts-node --scope scopeDir 내 파일에 대한 범위 컴파일러. 이 디렉토리 외부의 모든 것은 무시됩니다.
기본값 : false
환경 : TS_NODE_SCOPE
ts-node --scopeDir < path/to/directory > scope 활성화 될 때 컴파일러가 제한되는 디렉토리.
기본값 : 첫 번째 : tsconfig.json "rootdir"지정된 경우 tsconfig.json 또는 cwd tsconfig.json 포함하는 디렉토리가로드되지 않은 경우.
환경 : TS_NODE_SCOPE_DIR
package.json "type" 필드를 무시하고 특정 파일의 모듈 유형을 대체하십시오. 자세한 내용은 모듈 유형 오버라이드를 참조하십시오.
기본값 : package.json "type" 및 tsconfig.json "module"
tsconfig.json 또는 API를 통해서만 지정할 수 있습니다.
TS_NODE_HISTORY= < path/to/history/file > ts-nodeREPL의 역사 파일로가는 경로
기본값 : ~/.ts_node_repl_history
ts-node --noExperimentalReplAwait REPL에서 최상위 수준을 비활성화하십시오. Node의 --no-experimental-repl-await 에 해당합니다
기본값 : TypeScript 버전이 3.8 이상이고 대상이 ES2018 이상인 경우 활성화됩니다.
환경 : TS_NODE_EXPERIMENTAL_REPL_AWAIT 비활성화하도록 false 설정합니다
수입을 재개하고 지원하기 위해 통화가 필요한 실험 후크를 활성화하십시오.
import "./foo.js" 가 foo.ts 실행되도록 확장을 재입고합니다. 현재 다음 확장 기능이 매핑됩니다..js to .ts , .tsx 또는 .jsx.cjs to .cts.mjs to .mts.jsx ~ .tsx앞으로이 후크는 다음을 지원할 것입니다.
baseUrl , pathsrootDirsrootDir Mappings에서 outDir자세한 내용은 #1514를 참조하십시오.
기본값 : false 이지만 기본적으로 향후 버전에서 활성화 될 수 있습니다.
tsconfig.json 또는 API를 통해서만 지정할 수 있습니다.
ts-node --experimentalSpecifierResolution node Node의 --experimental-specifier-resolution 과 마찬가지로 편의를 위해 tsconfig.json 에서도 설정할 수도 있습니다. esm 활성화해야합니다.
기본값 : explicit
API에는 여기에 표시되지 않은 추가 옵션이 포함되어 있습니다.
SWC 지원은 --swc 플래그 또는 "swc": true TSConfig 옵션을 통해 내장됩니다.
SWC는 Rust에서 구현 된 타입 스크립트 호환 트랜스 필러입니다. 이로 인해 바닐라 transpileOnly 보다 훨씬 빠릅니다.
사용하려면 먼저 @swc/core 또는 @swc/wasm 설치하십시오. importHelpers 사용하는 경우 @swc/helpers 설치하십시오. target "ES2015"보다 작고 async / await 또는 Generator 함수를 사용하는 경우 regenerator-runtime 설치하십시오.
npm i -D @swc/core @swc/helpers regenerator-runtime 그런 다음 tsconfig.json 에 다음을 추가하십시오.
{
"ts-node" : {
"swc" : true
}
}SWC는
tslib대신@swc/helpers사용합니다.importHelpers활성화 한 경우@swc/helpers도 설치해야합니다.
TypeScript는 거의 항상 최신 import 구문을 사용하여 작성되지만 기본 런타임에 의해 실행되기 전에 변환됩니다. Node의 기본 ESM 지원을 사용하여 CommonJS로 변환하거나 기본 import 구문을 보존하도록 선택할 수 있습니다. 구성은 각각 다릅니다.
다음은 두 가지를 간단히 비교합니다.
| commonjs | 기본 ECMAScript 모듈 |
|---|---|
기본 import 구문을 작성하십시오 | 기본 import 구문을 작성하십시오 |
import require() 로 변환합니다. | import 변환하지 않습니다 |
| 노드는 Classic CommonJS 로더를 사용하여 스크립트를 실행합니다 | 노드는 새로운 ESM 로더를 사용하여 스크립트를 실행합니다 |
어떤 사용 :ts-nodenode -r ts-node/registerNODE_OPTIONS="ts-node/register" noderequire('ts-node').register({/* options */}) | 어떤 사용 :ts-node --esmts-node-esm"esm"을 설정하십시오 : tsconfig.json 에서 "esm": truenode --loader ts-node/esmNODE_OPTIONS="--loader ts-node/esm" node |
CommonJS로의 변환은 일반적으로 더 나이가 많기 때문에 더 단순하고 더 널리 지원됩니다. package.json 에서 "type": "module" 제거하고 tsconfig.json 에서 "module": "CommonJS" 설정해야합니다.
{
// This can be omitted; commonjs is the default
"type" : "commonjs"
} {
"compilerOptions" : {
"module" : "CommonJS"
}
} tsc , Webpack 또는 다른 빌드 도구의 "module": "ESNext" 유지 해야하는 경우 TS-Node에 대한 재정의를 설정할 수 있습니다.
{
"compilerOptions" : {
"module" : "ESNext"
} ,
"ts-node" : {
"compilerOptions" : {
"module" : "CommonJS"
}
}
} 노드의 ESM 로더 후크는 실험적 이며 변경 될 수 있습니다. TS-Node의 ESM 지원은 가능한 한 안정적이지만 Node가 새로운 버전의 노드를 깨뜨릴 수 있는 API에 의존합니다. 따라서 생산에는 권장되지 않습니다.
완전한 사용, 제한 사항 및 피드백을 제공하려면 #1007을 참조하십시오.
tsconfig.json 에서 package.json 및 "module": "ESNext" 에서 "type": "module" 설정해야합니다.
{
"type" : "module"
} {
"compilerOptions" : {
"module" : "ESNext" // or ES2015, ES2020
} ,
"ts-node" : {
// Tell ts-node CLI to install the --loader automatically, explained below
"esm" : true
}
} 또한 노드가 --loader 전달되도록해야합니다. TS-Node CLI는 esm 옵션으로 자동으로 수행합니다.
참고 :
--esm아동 프로세스를 스폰하여--loader를 전달해야합니다. 노드가 현재 프로세스에 로더 후크를 설치하는 기능을 추가하면 변경 될 수 있습니다.
# pass the flag
ts-node --esm
# Use the convenience binary
ts-node-esm
# or add `"esm": true` to your tsconfig.json to make it automatic
ts-nodeCLI를 사용하지 않는 경우 로더 플래그를 노드로 전달하십시오.
node --loader ts-node/esm ./index.ts
# Or via environment variable
NODE_OPTIONS= " --loader ts-node/esm " node ./index.ts TS-Node는 합리적인 기본 구성을 사용하여 BoilerPlate을 줄이면 tsconfig.json 이있는 경우에도 여전히 보일러 플레이트를 줄입니다. 어떤 구성이 사용되는지 확실하지 않은 경우 ts-node --showConfig 로 로그인 할 수 있습니다. 이것은 tsc --showConfig 와 유사하지만 "ts-node" 옵션도 포함됩니다.
TS-Node는 또한 로컬로 설치된 typescript 버전을 존중하지만 글로벌 설치는 전 세계적으로 설치된 typescript 로 떨어집니다. 사용되는 버전이 확실하지 않은 경우 ts-node -vv 로그인합니다.
$ ts-node -vv
ts-node v10.0.0
node v16.1.0
compiler v4.2.2
$ ts-node --showConfig
{
" compilerOptions " : {
" target " : " es6 " ,
" lib " : [
" es6 " ,
" dom "
],
" rootDir " : " ./src " ,
" outDir " : " ./.ts-node " ,
" module " : " commonjs " ,
" moduleResolution " : " node " ,
" strict " : true,
" declaration " : false,
" sourceMap " : true,
" inlineSources " : true,
" types " : [
" node "
],
" stripInternal " : true,
" incremental " : true,
" skipLibCheck " : true,
" importsNotUsedAsValues " : " error " ,
" inlineSourceMap " : false,
" noEmit " : false
},
" ts-node " : {
" cwd " : " /d/project " ,
" projectSearchDir " : " /d/project " ,
" require " : [],
" project " : " /d/project/tsconfig.json "
}
} TS-Node의 오류, TypeScript 컴파일러의 오류 및 node 오류를 구별하는 것이 중요합니다. 코드의 유형 오류, 코드의 버그 또는 구성의 결함으로 인해 오류가 발생하는시기를 이해하는 것이 중요합니다.
TSError 컴파일러의 유형 오류는 TSError 로 던져집니다. tsc 에서 얻은 오류와 동일합니다.
SyntaxError TSError 아닌 오류는 node.js (예 : SyntaxError )에서 나오고 typescript 또는 ts-node로 수정할 수 없습니다. 코드 또는 구성의 버그입니다.
node 버전은 TypeScript에서 지원하는 모든 JavaScript 구문을 지원하지 않을 수 있습니다. 컴파일러는 TSConfig "target" 옵션으로 제어되는 "다운 레벨링"을 통해이 구문을 변환해야합니다. 그렇지 않으면 코드가 정상으로 컴파일되지만 노드는 SyntaxError 던집니다.
예를 들어, node 12는 ?. 선택적 체인 연산자. "target": "esnext" 사용하는 경우 다음 TypeScript 구문 :
const bar : string | undefined = foo ?. bar ;이 JavaScript로 컴파일됩니다.
const a = foo ?. bar ; 이 코드를 실행하려고하면 Node 12에 SyntaxError 가 발생합니다. 이 문제를 해결하려면 "target": "es2019" 이상으로 전환해야합니다 ?. node 이해할 수있는 내용으로.
ERR_REQUIRE_ESM 이 오류는 모듈이 require() d를 요구할 때 노드에 의해 재투를하지만 노드는 기본 ESM으로 실행해야한다고 생각합니다. 이것은 몇 가지 이유로 발생할 수 있습니다.
webpack.config.ts 와 같은 구성 파일이 있으며 CommonJS로 실행되어야합니다..cts 로 바꿉니다.ERR_UNKNOWN_FILE_EXTENSION이 오류는 모듈에 인식되지 않은 파일 확장자가 있거나 전혀 확장이없고 기본 ESM으로 실행되는 경우 노드에 의해 재투됩니다. 이것은 몇 가지 이유로 발생할 수 있습니다.
mocha 와 같은 확장되지 않은 바이너리가있는 도구를 사용하고 있습니다.ts-node-esm , ts-node --esm 사용하거나 "ts-node": {"esm": true} tsconfig.json에 추가하십시오. 문서webpack.config.ts 와 같은 구성 파일이 있으며 CommonJS로 실행되어야합니다..cts 로 바꿉니다. TS-Node는 files 간절히로드하거나 기본적으로 include exclude 하지 않습니다 . 이는 대부분의 프로젝트가 프로젝트 디렉토리 (예 : Gulpfile.ts , 런타임 대 테스트)의 모든 파일을 사용하지 않으며 유형의 모든 파일을 유형의 시작 시간에 구문 분석하지 않기 때문입니다. 대신, TS-Node는 스크립트 파일 (예 : ts-node index.ts )으로 시작하고 TypeScript는 가져 오기 및 참조를 기반으로 종속성을 해결합니다.
때때로이 최적화는 유형이 누락됩니다. 다행히도 타자기에 포함시키는 다른 방법이 있습니다.
글로벌 정의의 경우 typeRoots 컴파일러 옵션을 사용할 수 있습니다. 이를 위해서는 유형 정의를 유형 패키지 (느슨한 타입 정의 파일 아님)로 구성해야합니다. 이 작동 방식에 대한 자세한 내용은 TypeScript 핸드북에서 찾을 수 있습니다.
예제 tsconfig.json :
{
"compilerOptions" : {
"typeRoots" : [ "./node_modules/@types" , "./typings" ]
}
}예제 프로젝트 구조 :
<project_root>/
-- tsconfig.json
-- typings/
-- <module_name>/
-- index.d.ts
예제 모듈 선언 파일 :
declare module '<module_name>' {
// module definitions go here
} 모듈 정의의 경우 paths 사용할 수 있습니다.
{
"compilerOptions" : {
"baseUrl" : "." ,
"paths" : {
"custom-module-type" : [ "types/custom-module-type" ]
}
}
} 또 다른 옵션은 Triple-Slash 지시문입니다. compilerOptions 변경하지 않거나 typeRoots 대한 유형 정의를 구조화하지 않으려는 경우 도움이 될 수 있습니다. 아래는 프로젝트 내 상대 경로로서 트리플 슬래시 지시의 예입니다.
/// <reference path="./types/lib_greeter" />
import { Greeter } from "lib_greeter"
const g = new Greeter ( ) ;
g . sayHello ( ) ; 위의 작업이없고 files 사용해야 하는 경우 files 옵션을 include 하거나 exclude .
npx 또는 yarn dlx 로 TypeScript를 실행할 때 코드는 임시 node_modules 디렉토리에 있습니다.
node_modules 의 내용은 기본적으로 무시됩니다. 실행이 실패하면 skipIgnore 활성화하십시오.
이러한 트릭은 TS- 노드를 더 빨리 만들 것입니다.
테스트 나 줄무늬의 일환으로 타이핑하는 것이 종종 낫습니다. tsc --noEmit 실행하여이를 수행 할 수 있습니다. 이 경우 TS-Node는 타이핑을 건너 뛸 수있어 훨씬 빠릅니다.
ts-node에서 typechecking을 건너 뛰려면 다음 중 하나를 수행하십시오.
transpileOnly 사용하여 타이핑을 건너 뛸 수 있습니다 TS-Node에서 절대적으로 타이핑 해야하는 경우 :
require() ; import 선호합니다--files 있거나없이 시도하십시오. 프로젝트에 따라 더 빠를 수 있습니다tsc --showConfig 확인하십시오. 실행 된 모든 파일이 포함되어 있는지 확인하십시오skipLibCheck 활성화합니다@types 로드하지 않도록 types 배열을 설정하십시오 ts-node는 .ts , .tsx , .js 및/또는 .jsx 확장에 후크를 등록하여 작동합니다.
바닐라 node 디스크에서 코드를 읽고 실행하여 .js 로드합니다. 우리의 후크는 중간에서 실행되며 코드를 TypeScript에서 JavaScript로 변환하고 결과를 실행을 위해 node 로 전달합니다. 이 변환은 마치 tsc 통해 편집 한 것처럼 tsconfig.json 존중합니다.
우리는 또한 다른 후크를 등록하기 위해 사워 맵을 적용하고 .js 가져 오기에서 .ts 로.
TS-Node는 특정 파일을 변환하고 다른 파일을 무시합니다. 우리는이 메커니즘을 "스코핑"이라고합니다. 스코핑을 구성하는 다양한 옵션이 있으므로 TS-Node가 프로젝트의 파일 만 변환 할 수 있습니다.
경고:
무시 된 파일은 여전히 node.js에서 실행할 수 있습니다. 파일을 무시한다는 것은 파일을 TypeScript에서 JavaScript로 변환하지는 않지만 실행을 방해하지는 않습니다.
파일에 변환이 필요하지만 무시되면 노드는이를 해결하지 못하거나 바닐라 JavaScript로 실행하려고 시도 할 수 있습니다. 노드는 TypeScript 유형 구문 또는 출혈 에지 ECMAScript 기능을 이해하지 못하기 때문에 구문 오류 또는 기타 고장을 유발할 수 있습니다.
.js 와 .jsx allowJs 활성화 될 때만 변환됩니다.
.tsx 및 .jsx 는 jsx 활성화 된 경우에만 변환됩니다.
경고:
ts-node가
allowJs와 함께 사용될 때, 모든 비 정자 JavaScript 파일은 ts-node로 변환됩니다.
node_modules 건너 뛰기 기본적으로 TS-Node는 /node_modules/ 에서 파일을 컴파일하지 않습니다.
node_modules 에서 컴파일되지 않은 TypeScript를 가져와야하는 경우 --skipIgnore 또는 TS_NODE_SKIP_IGNORE 사용 하여이 제한을 우회하십시오.
TypeScript 파일과 동일한 이름 인 컴파일 된 JavaScript 파일이 이미 존재하는 경우 TypeScript 파일은 무시됩니다. TS-Node는 사전 컴파일 된 JavaScript를 가져옵니다.
TS-Node가 사전 컴파일 된 JavaScript가 아닌 TypeScript 소스를 가져 오도록 강요하려면 --preferTsExts 사용하십시오.
당사의 scope 및 scopeDir 옵션은 디렉토리 내의 파일로의 변환을 제한합니다.
당사의 ignore 옵션은 하나 이상의 정규 표현식과 일치하는 파일을 무시합니다.
tsconfig.json 의 paths 섹션에 따라 tsconfig-paths와 함께 ts-node를 사용하여 모듈을로드 할 수 있습니다.
{
"ts-node" : {
// Do not forget to `npm i -D tsconfig-paths`
"require" : [ "tsconfig-paths/register" ]
}
} 공식 TypeScript 핸드북은 "추가 모듈 해상도 플래그"에서 "paths" 에 대한 의도 된 목적을 설명합니다.
TypeScript 컴파일러에는 최종 출력을 생성하기 위해 소스에 발생할 것으로 예상되는 변환을 컴파일러에게 알리기 위한 추가 플래그 세트가 있습니다.
컴파일러는 이러한 변환을 수행하지 않을 것입니다. 이러한 정보를 사용하여 모듈 가져 오기를 정의 파일로 해결하는 프로세스를 안내합니다.
즉, "paths" 는 빌드 도구 또는 런타임이 이미 수행 한 매핑을 설명하기위한 것임을 의미하며, 빌드 도구 또는 런타임에 모듈을 해결하는 방법을 알려주는 것이 아닙니다. 다시 말해, 그들은 node 가 이미 이해하는 방식으로 우리의 가져 오기를 작성하려고합니다. 이러한 이유로 TS-Node는 "paths" 매핑을 구현하기 위해 node 의 모듈 해상도 동작을 수정하지 않습니다.
일부 프로젝트에는 추가 기능을 추가하는 패치 된 TypeScript 컴파일러가 필요합니다. 예를 들어, ttypescript 및 ts-patch 사용자 정의 변압기를 구성하는 기능을 추가합니다. 바닐라 타입 typescript 모듈의 드롭 인 교체품이며 동일한 API를 구현합니다.
예를 들어, ttypescript 및 ts-transformer-keys 사용하려면 tsconfig.json 에 이것을 추가하십시오.
{
"ts-node" : {
// This can be omitted when using ts-patch
"compiler" : "ttypescript"
} ,
"compilerOptions" : {
// plugin configuration is the same for both ts-patch and ttypescript
"plugins" : [
{ "transform" : "ts-transformer-keys/transformer" }
]
}
} TS-Node는 타사 트랜스 필러를 플러그인으로 지원합니다. SWC와 같은 트랜스 필러는 TypeScript를 TypeScript 컴파일러보다 훨씬 빠르게 JavaScript로 변환 할 수 있습니다. 당신은 여전히 TS-Node의 자동 tsconfig.json Discovery, Sourcemap 지원 및 Global TS-Node CLI의 혜택을 누릴 수 있습니다. 플러그인은 프로젝트 보일러 플레이트를 단순화하는 기존 tsconfig.json 에서 적절한 구성을 자동으로 도출합니다.
컴파일러와 트랜스 필러의 차이점은 무엇입니까?
우리의 목적을 위해 컴파일러는 TypeScript의 API를 구현하고 타이치 체크를 수행 할 수 있습니다. 타사 트랜스 필러는 그렇지 않습니다. 둘 다 TypeScript를 JavaScript로 변환합니다.
transpiler 옵션을 사용하면 TS-Node가있는 타사 트랜스 필러 플러그인을 사용할 수 있습니다. transpiler require() d. 내장 된 swc 플러그인은 ts-node/transpilers/swc 로 노출됩니다.
예를 들어, 가상의 " @cspotcode/fast-ts- npm install @cspotcode/fast-ts-compiler "를 사용하려면 먼저 프로젝트에 설치하십시오.
그런 다음 다음을 tsconfig에 추가하십시오.
{
"ts-node" : {
"transpileOnly" : true ,
"transpiler" : "@cspotcode/fast-ts-compiler"
}
}자신의 트랜스 필러 플러그인을 작성하려면 API 문서를 확인하십시오.
플러그인은 require() d by ts-node이므로 로컬 스크립트 또는 NPM에 게시 된 노드 모듈 일 수 있습니다. 모듈은 TranspilerModule 인터페이스에 의해 설명 된 create 기능을 내보내야합니다. Startup에서 TS-Node에 의해 create 호출하여 하나 이상의 트랜스 필러 인스턴스를 생성합니다. 인스턴스는 TypeScript를 JavaScript로 변환하는 데 사용됩니다.
작업 예제는 번들로드 된 SWC 플러그인을 확인하십시오 : https://github.com/typestrong/ts-node/blob/main/src/transpilers/swc.ts.
가능하면이 섹션에 설명 된 옵션 대신 TypeScript의
NodeNext또는Node16모드를 사용하는 것이 좋습니다."module": "NodeNext"와.cts파일 확장을 사용하는 것은 대부분의 프로젝트에서 잘 작동합니다.
CommonJS 또는 기본 ECMAScript 모듈로 파일을 컴파일하고 실행하는 방법을 결정할 때 TS- 노드는 node 및 tsc 동작과 일치합니다. 이는 tsconfig.json "module" 옵션에 따라 TypeScript 파일이 변환되고 package.json "type" 필드에 대한 Node의 규칙에 따라 실행됩니다. "module": "NodeNext" 설정하면 모든 것이 작동해야합니다.
드문 경우, 일부 파일의 경우이 동작을 무시해야 할 수도 있습니다. 예를 들어, 일부 도구는 name-of-tool.config.ts 읽고 해당 파일이 CommonJS로 실행되도록 요구합니다. "type": "module" 및 "module": "esnext" 로 tsconfig.json 으로 구성된 package.json 이있는 경우 구성은 기본적으로 기본 ecmascript이며 오류가 발생합니다. 구성 및 지원 스크립트를 CommonJS로 실행하도록 강제해야합니다.
이러한 상황에서는 moduleTypes 옵션이 특정 파일을 CommonJS 또는 ESM으로 무시할 수 있습니다. .mts , .cts , .cjs 및 .mjs 파일 확장자를 사용하여 유사한 재정의가 가능합니다. moduleTypes .ts 및 .js 파일에 대해 동일한 효과를 달성하고 tsconfig.json "module" 구성을 적절하게 무시 합니다.
다음 예제는 TS-Node에게 CommonJS로 웹 팩 구성을 실행하도록 지시합니다.
{
"ts-node" : {
"transpileOnly" : true ,
"moduleTypes" : {
"webpack.config.ts" : "cjs" ,
// Globs are also supported with the same behavior as tsconfig "include"
"webpack-config-scripts/**/*" : "cjs"
}
} ,
"compilerOptions" : {
"module" : "es2020" ,
"target" : "es2020"
}
} 각 키는 tsconfig의 "include" 배열과 동일한 구문을 가진 글로벌 패턴입니다. 여러 패턴이 동일한 파일과 일치하면 마지막 패턴이 우선합니다.
cjs 파일을 일치시켜 CommonJS로 컴파일하고 실행합니다.esm 파일을 일치시켜 컴파일하고 기본 ECMAScript 모듈로 실행합니다.package.json 하나를 "type" 동작 tsconfig.json 재설정 "module" package . 재정의 된 모듈 유형이있는 파일은 isolatedModules 과 동일한 제한으로 변환됩니다. 이는 preserveConstEnums 비활성화 된 const enum S를 사용하는 것과 같은 희귀 한 경우에만 영향을 미칩니다.
이 기능은 정상적인 compilerOptions package.json 구성이 불가능한 시나리오를 용이하게하기위한 것입니다. 예를 들어, webpack.config.ts 는 "type" 재정의하기 위해 자체 package.json 제공 할 수 없습니다. 가능한 경우 기존 package.json 및 tsconfig.json 구성을 선호해야합니다.
TS-Node의 완전한 API는 여기에 문서화되어 있습니다 : API Docs
다음은 성취 할 수있는 것의 몇 가지 하이라이트입니다.
create() 후크를 등록하지 않고 TS-Node의 컴파일러 서비스를 만듭니다.createRepl() REPL 서비스의 인스턴스를 생성하므로 자신의 TypeScript 기반 REPLS를 만들 수 있습니다.createEsmHooks() 다른 로더로 구성하거나 추가 기능으로 보강하는 데 적합한 ESM 로더 후크를 만듭니다.TS-Node는 노드에 일류 타입 스크립트 지원을 추가하는 데 중점을 둡니다. 파일과 코드 재 장전 시청은 프로젝트의 범위가 벗어납니다.
파일 변경에서 ts-node 프로세스를 다시 시작하려면 Nodemon, Onchange 및 Node-Dev Work와 같은 기존 Node.js 도구.
또한 파일 변경시 프로세스를 다시 시작하는 컴파일을 위해 TS ts-node-dev 를 사용하는 node-dev 의 수정 된 버전 인 TS ts-node -Dev도 있습니다. ts-node-dev 기본 ESM 로더와 호환되지 않습니다.
package.json 을 통해 AVA를 구성한다고 가정하면 다음 구성 중 하나를 추가하십시오.
package.json 에 "type": "module" 없는 경우이 구성을 사용하십시오.
{
"ava" : {
"extensions" : [
"ts"
] ,
"require" : [
"ts-node/register"
]
}
} 이 구성은 package.json 에 "type": "module" 있는 경우 필요합니다.
{
"ava" : {
"extensions" : {
"ts" : "module"
} ,
"nonSemVerExperiments" : {
"configurableModuleFormat" : true
} ,
"nodeArguments" : [
"--loader=ts-node/esm"
]
}
} TS- 노드 지원은 Gulp에 내장되어 있습니다.
# Create a `gulpfile.ts` and run `gulp`.
gulphttps://gulpjs.com/docs/en/getting-started/javaScript-and-gulpfiles#transpilation도 참조하십시오
새 node.js 구성을 만들고 "노드 매개 변수"에 -r ts-node/register 추가하십시오.
참고 : 구성 옵션에 따라 --project <tsconfig.json> 명령 줄 인수를 사용하고 elitned TS_NODE_PROJECT=<tsconfig.json>
mocha --require ts-node/register --extensions ts,tsx --watch --watch-files src ' tests/**/*.{ts,tsx} ' [...args]또는 Mocha 구성 파일을 통해 옵션을 지정하십시오.
{
// Specify "require" for CommonJS
"require" : "ts-node/register" ,
// Specify "loader" for native ESM
"loader" : "ts-node/esm" ,
"extensions" : [ "ts" , "tsx" ] ,
"spec" : [
"tests/**/*.spec.*"
] ,
"watch-files" : [
"src"
]
}다음을 참조하십시오 : https://mochajs.org/#configuring-mocha-nodejs
mocha --require ts-node/register --watch-extensions ts,tsx " test/**/*.{ts,tsx} " [...args] 참고 : --watch-extensions --watch 모드에서만 사용됩니다.
ts-node node_modules/tape/bin/tape [...args] 새 node.js 디버그 구성을 만들고 Node Args에 -r ts-node/register 추가하고 program args 목록으로 옮깁니다 (따라서 Code는 outFiles 찾지 않음).
{
"configurations" : [ {
"type" : "node" ,
"request" : "launch" ,
"name" : "Launch Program" ,
"runtimeArgs" : [
"-r" ,
"ts-node/register"
] ,
"args" : [
"${workspaceFolder}/src/index.ts"
]
} ] ,
} 참고 : 구성 옵션에 따라 --project <tsconfig.json> 명령 줄 인수를 사용하고 VS 코드에서 시작할 때 동일한 동작을 적용하려는 경우 "ENV"키를 시작 구성에 "env": { "TS_NODE_PROJECT": "<tsconfig.json>" } 추가하십시오.
대부분의 경우 NODE_OPTIONS 설정하면 다른 노드 도구, 하위 프로세스 및 작업자 스레드 내에서 ts-node 활성화됩니다.
NODE_OPTIONS= " -r ts-node/register "또는 기본 ESM 지원이 필요한 경우 :
NODE_OPTIONS= " --loader ts-node/esm " 이것은 다른 코드 ts-node 실행하기 전에이 환경 변수를 수신하는 모든 노드 프로세스를 지시합니다.
TS-Node는 MIT 라이센스에 따라 라이센스가 부여됩니다. MIT
TS-Node에는 MIT 라이센스에 따라 라이센스가 부여 된 Node.js의 소스 코드가 포함되어 있습니다. node.js 라이센스 정보
TS-Node에는 Apache License 2.0에 따라 라이센스가 부여 된 Typescript 컴파일러의 소스 코드가 포함됩니다. 타임 스크립트 라이센스 정보