
TypeScript Execution และ REPL สำหรับ Node.js พร้อมแผนที่แหล่งที่มาและการสนับสนุน ESM ดั้งเดิม
เอกสารล่าสุดสามารถพบได้ในเว็บไซต์ของเรา: https://typestrong.org/ts-node
nodeTSErrorSyntaxErrorERR_REQUIRE_ESMERR_UNKNOWN_FILE_EXTENSIONnode_modulesTS-node เป็นเครื่องมือ Execution TypeScript และ REPLOD สำหรับ Node.JS.
มันจะแปลง TypeScript เป็น JavaScript ช่วยให้คุณสามารถเรียกใช้ typeScript บน node.js โดยตรงโดยไม่ต้องคอมไพล์ล่วงหน้า สิ่งนี้สามารถทำได้โดยการเชื่อมต่อโมดูลการโหลด 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 เพื่อทดสอบ env เวอร์ชันของคุณเพื่อเข้ากันได้กับ -S :
# Note that these unusual quotes are necessary
/usr/bin/env --debug ' -S echo foo bar ' node -r ts-node/register node --loader ts-node/esm
ในหลายกรณีการตั้ง 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 คุณสามารถต้องการ ts-node และลงทะเบียนตัวโหลดสำหรับความต้องการในอนาคตโดยใช้ require('ts-node').register({ /* options */ })
ตรวจสอบ API ของเราสำหรับคุณสมบัติเพิ่มเติม
TS-node รองรับตัวเลือกที่หลากหลายซึ่งสามารถระบุได้ผ่าน tsconfig.json เป็นธง CLI เป็นตัวแปรสภาพแวดล้อมหรือทางโปรแกรม
สำหรับรายการที่สมบูรณ์ให้ดูตัวเลือก
TS-Node CLI Flag ต้องมา ก่อน สคริปต์ entrypoint ตัวอย่างเช่น:
$ ts-node --project tsconfig-dev.json say-hello.ts Ronald
Hello, Ronald ! TS-node ค้นหาและโหลด tsconfig.json โดยอัตโนมัติ ตัวเลือก TS-Node ส่วนใหญ่สามารถระบุได้ในวัตถุ "ts-node" โดยใช้ชื่อโปรแกรมอูฐ เราขอแนะนำสิ่งนี้เพราะมันใช้งานได้แม้ว่าคุณจะไม่สามารถผ่านธง CLI เช่น node --require ts-node/register และเมื่อใช้ Shebangs
ใช้ --skipProject เพื่อข้ามการโหลด tsconfig.json ใช้ --project เพื่อระบุเส้นทางไปยัง tsconfig.json อย่างชัดเจน
เมื่อค้นหาจะได้รับการแก้ไขโดยใช้พฤติกรรมการค้นหาเช่นเดียวกับ tsc โดยค่าเริ่มต้นการค้นหานี้จะดำเนินการสัมพันธ์กับสคริปต์ entrypoint ใน --cwdMode หรือหากไม่มีการระบุ entryPoint -ตัวอย่างเช่นเมื่อใช้การแก้ไข -การค้นหาจะดำเนินการสัมพันธ์กับ --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/BASE รักษาการกำหนดค่าที่แนะนำสำหรับหลายโหนด เพื่อความสะดวกเหล่านี้รวมกับ 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/ฐานที่เข้ากันได้กับ 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 โดยตรงและติดตั้ง ts -node ผ่าน --require / -r
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 ) คล้ายกับ node.js cli
ts-node รองรับ --project และ --showConfig คล้ายกับ TSC CLI
ตัวแปรสภาพแวดล้อมที่มีอยู่ใน ALL_CAPS
ts-node --helpพิมพ์ข้อความช่วยเหลือ
ts-node -v
ts-node -vvv พิมพ์เวอร์ชัน -vv มีเวอร์ชันโหนดและ TypeScript Compiler -vvv รวมถึงเส้นทางที่แน่นอนไปยังการติดตั้ง TS-Node และ typeScript
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 -iเปิดการเติมแม้ว่า stdin จะไม่ปรากฏว่าเป็นเทอร์มินัล
ts-node --esm
ts-node-esmBootstrap พร้อมตัวโหลด ESM ทำให้สามารถรองรับ ESM เต็มรูปแบบได้
ts-node -P < path/to/tsconfig >
ts-node --project < path/to/tsconfig >พา ธ ไปยังไฟล์ tsconfig
หมายเหตุตัวพิมพ์ใหญ่ -P สิ่งนี้แตกต่างจากตัวเลือกโครงการ tsc 'S -p/--project
สภาพแวดล้อม: TS_NODE_PROJECT
ts-node --skipProjectข้ามความละเอียดการกำหนดค่าโครงการและการโหลดโครงการ
ค่าเริ่มต้น: false
สภาพแวดล้อม: TS_NODE_SKIP_PROJECT
ts-node -c
ts-node --cwdMode
ts-node-cwdแก้ไขการกำหนดค่าที่สัมพันธ์กับไดเรกทอรีปัจจุบันแทนไดเรกทอรีของสคริปต์ entrypoint
ts-node -O < json compilerOptions >
ts-node --compilerOptions < json compilerOptions >วัตถุ JSON เพื่อรวมกับตัวเลือกคอมไพเลอร์
สภาพแวดล้อม: TS_NODE_COMPILER_OPTIONS
ts-node --showConfig พิมพ์ tsconfig.json ที่แก้ไขแล้วรวมถึงตัวเลือก ts-node และออก
ts-node -T
ts-node --transpileOnly ใช้ transpileModule ที่เร็วขึ้นของ Typescrip
ค่าเริ่มต้น: false
สภาพแวดล้อม: TS_NODE_TRANSPILE_ONLY
ts-node --typeCheck ตรงข้ามกับ --transpileOnly
ค่าเริ่มต้น: true
สภาพแวดล้อม: TS_NODE_TYPE_CHECK
ts-node -H
ts-node --compilerHostใช้ API โฮสต์คอมไพเลอร์ของ TypeScript
ค่าเริ่มต้น: false
สภาพแวดล้อม: TS_NODE_COMPILER_HOST
ts-node --files โหลด files include และ exclude จาก tsconfig.json เมื่อเริ่มต้น สิ่งนี้อาจหลีกเลี่ยงความล้มเหลวของการพิมพ์ผิดพลาด ดูประเภทที่หายไปสำหรับรายละเอียด
ค่าเริ่มต้น: 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 ที่กำหนดเอง
ค่าเริ่มต้น: typescript
สภาพแวดล้อม: TS_NODE_COMPILER
ts-node --swc transpile ด้วย SWC หมายถึง --transpileOnly
ค่าเริ่มต้น: false
ts-node --transpiler < name >
# Example
ts-node --transpiler ts-node/transpilers/swcใช้ transpiler ของบุคคลที่สามและไม่ใช่ประเภท
ts-node --preferTsExtsสั่งซื้อส่วนขยายไฟล์ใหม่เพื่อให้การนำเข้า typecript เป็นที่ต้องการ
ค่าเริ่มต้น: false
สภาพแวดล้อม: TS_NODE_PREFER_TS_EXTS
ts-node --logErrorบันทึกข้อผิดพลาด TypeScrip
ค่าเริ่มต้น: false
สภาพแวดล้อม: TS_NODE_LOG_ERROR
ts-node --prettyใช้รูปแบบการวินิจฉัยที่สวยงาม
ค่าเริ่มต้น: 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" ดูประเภทโมดูลแทนที่สำหรับรายละเอียด
ค่าเริ่มต้น: obeys package.json "type" และ tsconfig.json "module"
สามารถระบุได้ผ่าน tsconfig.json หรือ api เท่านั้น
TS_NODE_HISTORY= < path/to/history/file > ts-nodeพา ธ ไปยังไฟล์ประวัติสำหรับ REPL
ค่าเริ่มต้น: ~/.ts_node_repl_history
ts-node --noExperimentalReplAwait ปิดการใช้งานระดับบนสุดรอใน REPL เทียบเท่ากับ Node --no-experimental-repl-await
ค่าเริ่มต้น: เปิดใช้งาน IF TypeScript เวอร์ชันคือ 3.8 หรือสูงกว่าและเป้าหมายคือ ES2018 หรือสูงกว่า
สภาพแวดล้อม: TS_NODE_EXPERIMENTAL_REPL_AWAIT ตั้ง false เพื่อปิดการใช้งาน
เปิดใช้งานตะขอเชิงทดลองที่นำเข้ามาอีกครั้งและต้องการการโทรเพื่อสนับสนุน:
import "./foo.js" จะดำเนินการ foo.ts ปัจจุบันส่วนขยายต่อไปนี้จะถูกแมป:.js ถึง .ts , .tsx หรือ .jsx.cjs ถึง .cts.mjs ถึง .mts.jsx ถึง .tsxในอนาคตเบ็ดนี้จะสนับสนุน:
baseUrl , pathsrootDirsoutDir to rootDir mappings สำหรับโครงการคอมโพสิตและ monoreposสำหรับรายละเอียดดู #1514
ค่าเริ่มต้น: false แต่จะเปิดใช้งานโดยค่าเริ่มต้นในเวอร์ชันในอนาคต
สามารถระบุได้ผ่าน tsconfig.json หรือ api เท่านั้น
ts-node --experimentalSpecifierResolution node เช่นเดียวกับ Node --experimental-specifier-resolution แต่ยังสามารถตั้งค่าใน tsconfig.json ของคุณเพื่อความสะดวก ต้องเปิดใช้งาน esm
ค่าเริ่มต้น: explicit
API มีตัวเลือกเพิ่มเติมที่ไม่แสดงที่นี่
การสนับสนุน SWC อยู่ในตัวผ่าน --swc Flag หรือ "swc": true
SWC เป็น transpiler ที่เข้ากันได้กับ TypeScript ที่ใช้ใน 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 ใช้
@swc/helpersแทนtslibหากคุณเปิดใช้งานimportHelpersคุณต้องติดตั้ง@swc/helpersด้วย
TypeScript มักจะเขียนโดยใช้ไวยากรณ์ import ที่ทันสมัย แต่ก็ถูกเปลี่ยนก่อนที่จะถูกเรียกใช้งานโดยรันไทม์พื้นฐาน คุณสามารถเลือกที่จะแปลงเป็น CommonJS หรือเพื่อรักษาไวยากรณ์ import ดั้งเดิมโดยใช้การสนับสนุน ESM ดั้งเดิมของ Node การกำหนดค่าแตกต่างกันสำหรับแต่ละ
นี่คือการเปรียบเทียบสั้น ๆ ของทั้งสอง
| สามัญชน | โมดูล ecmascript ดั้งเดิม |
|---|---|
เขียนไวยากรณ์ import ดั้งเดิม | เขียนไวยากรณ์ import ดั้งเดิม |
แปลง import เป็น require() | ไม่เปลี่ยน import |
| โหนดดำเนินการสคริปต์โดยใช้ตัวโหลด CommonJS แบบคลาสสิก | โหนดดำเนินการสคริปต์โดยใช้ตัวโหลด ESM ใหม่ |
ใช้:ts-nodenode -r ts-node/registerNODE_OPTIONS="ts-node/register" noderequire('ts-node').register({/* options */}) | ใช้:ts-node --esmts-node-esmตั้งค่า "esm": true ใน tsconfig.jsonnode --loader ts-node/esmNODE_OPTIONS="--loader ts-node/esm" node |
การเปลี่ยนเป็น CommonJS มักจะง่ายขึ้นและได้รับการสนับสนุนอย่างกว้างขวางมากขึ้นเนื่องจากมีอายุมากกว่า คุณต้องลบ "type": "module" จาก package.json และตั้งค่า "module": "CommonJS" ใน tsconfig.json
{
// This can be omitted; commonjs is the default
"type" : "commonjs"
} {
"compilerOptions" : {
"module" : "CommonJS"
}
} หากคุณต้องเก็บ "module": "ESNext" สำหรับ tsc , WebPack หรือเครื่องมือสร้างอื่นคุณสามารถตั้งค่าการแทนที่สำหรับ TS-Node
{
"compilerOptions" : {
"module" : "ESNext"
} ,
"ts-node" : {
"compilerOptions" : {
"module" : "CommonJS"
}
}
} ตะขอ ESM Loader ของ Node นั้นมี การทดลอง และอาจมีการเปลี่ยนแปลง การรองรับ ESM ของ TS-Node นั้นมีความเสถียรที่สุดเท่าที่จะเป็นไปได้ แต่ต้องอาศัย API ซึ่งโหนดสามารถ และจะ แตกในโหนดเวอร์ชันใหม่ ดังนั้นจึงไม่แนะนำให้ผลิต
สำหรับการใช้งานข้อ จำกัด และการให้ข้อเสนอแนะที่สมบูรณ์ดู #1007
คุณต้องตั้งค่า "type": "module" ใน package.json และ "module": "ESNext" ใน tsconfig.json
{
"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-nodeหากคุณไม่ได้ใช้ CLI ของเราให้ส่งธงโหลดไปยังโหนด
node --loader ts-node/esm ./index.ts
# Or via environment variable
NODE_OPTIONS= " --loader ts-node/esm " node ./index.ts TS-Node ใช้การกำหนดค่าเริ่มต้นที่เหมาะสมเพื่อลดหม้อไอน้ำในขณะที่ยังคงเคารพ 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 เวอร์ชันของคุณอาจไม่รองรับไวยากรณ์ JavaScript ทั้งหมดที่รองรับโดย TypeScript คอมไพเลอร์จะต้องแปลงไวยากรณ์นี้ผ่าน "downleveling" ซึ่งควบคุมโดยตัวเลือก tsconfig "target" มิฉะนั้นรหัสของคุณจะรวบรวมได้ดี แต่โหนดจะโยน SyntaxError
ตัวอย่างเช่น node 12 ไม่เข้าใจ ?. ผู้ประกอบการผูกมัดเสริม หากคุณใช้ "target": "esnext" ดังนั้นไวยากรณ์ TypeScript ต่อไปนี้:
const bar : string | undefined = foo ?. bar ;จะรวบรวมลงใน JavaScript นี้:
const a = foo ?. bar ; เมื่อคุณพยายามเรียกใช้รหัสนี้ Node 12 จะโยน SyntaxError ในการแก้ไขปัญหานี้คุณต้องเปลี่ยนเป็น "target": "es2019" หรือต่ำกว่าการแปลง TypeScript ?. ในบางสิ่ง node สามารถเข้าใจได้
ERR_REQUIRE_ESM ข้อผิดพลาดนี้ถูกโยนลงโดยโหนดเมื่อโมดูล require() d แต่โหนดเชื่อว่าควรดำเนินการเป็น ESM ดั้งเดิม สิ่งนี้สามารถเกิดขึ้นได้ด้วยเหตุผลสองสามข้อ:
webpack.config.ts ซึ่งจะต้องดำเนินการเป็น CommonJs.ctsERR_UNKNOWN_FILE_EXTENSIONข้อผิดพลาดนี้ถูกโยนลงโดยโหนดเมื่อโมดูลมีส่วนขยายไฟล์ที่ไม่รู้จักหรือไม่มีส่วนขยายเลยและกำลังถูกดำเนินการเป็น ESM ดั้งเดิม สิ่งนี้สามารถเกิดขึ้นได้ด้วยเหตุผลสองสามข้อ:
mochats-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 แบบหลวม) รายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานนี้สามารถพบได้ในคู่มือ 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" ]
}
}
} อีกทางเลือกหนึ่งคือคำสั่งสามสแลช สิ่งนี้อาจเป็นประโยชน์หากคุณไม่ต้องการเปลี่ยน compilerOptions หรือจัดโครงสร้างคำจำกัดความประเภทของคุณสำหรับ typeRoots ด้านล่างเป็นตัวอย่างของคำสั่งสามสแลชเป็นเส้นทางที่สัมพันธ์กันภายในโครงการของคุณ:
/// <reference path="./types/lib_greeter" />
import { Greeter } from "lib_greeter"
const g = new Greeter ( ) ;
g . sayHello ( ) ; หากไม่มีงานข้างต้นและคุณ ต้อง ใช้ files include หรือ exclude เปิดใช้งานตัวเลือก files ของเรา
เมื่อดำเนินการ TypeScript กับ npx หรือ yarn dlx รหัสจะอยู่ภายในไดเรกทอรี node_modules ชั่วคราว
เนื้อหาของ node_modules จะถูกละเว้นโดยค่าเริ่มต้น หากการดำเนินการล้มเหลวให้เปิดใช้งาน skipIgnore
เทคนิคเหล่านี้จะทำให้ TS-node เร็วขึ้น
มักจะดีกว่าที่จะ typecheck เป็นส่วนหนึ่งของการทดสอบหรือผ้าสำลีของคุณ คุณสามารถเรียกใช้ tsc --noEmit เพื่อทำสิ่งนี้ ในกรณีเหล่านี้ TS-node สามารถข้าม typechecking ทำให้เร็วขึ้นมาก
หากต้องการข้าม typechecking ใน ts-node ให้ทำอย่างใดอย่างหนึ่งต่อไปนี้:
transpileOnly เพื่อข้าม typechecking โดยไม่ต้อง SWC หากคุณต้องพิมพ์ typecheck ใน ts-node อย่างแน่นอน:
require() ซึ่งอาจทำให้เกิด typechecking ซ้ำ ชอบ import--files ; หนึ่งอาจเร็วขึ้นขึ้นอยู่กับโครงการของคุณtsc --showConfig ; ตรวจสอบให้แน่ใจว่ามีไฟล์ที่ดำเนินการทั้งหมดรวมอยู่ด้วยskipLibChecktypes เพื่อหลีกเลี่ยงการโหลด @types ที่ไม่จำเป็น TS-Node ทำงานโดยการลงทะเบียน hooks สำหรับ .ts , .tsx , .js และ/หรือ .jsx
Vanilla node โหลด .js โดยการอ่านรหัสจากดิสก์และดำเนินการ ตะขอของเราทำงานอยู่ตรงกลางเปลี่ยนรหัสจาก typeScript เป็น JavaScript และส่งผลลัพธ์ไปยัง node สำหรับการดำเนินการ การแปลงนี้จะเคารพ tsconfig.json ของคุณราวกับว่าคุณได้รวบรวมผ่าน tsc
นอกจากนี้เรายังลงทะเบียนตะขออื่น ๆ อีกสองสามตัวเพื่อใช้ sourcemaps เพื่อสแต็กร่องรอยและทำการตรวจสอบใหม่จาก .js นำเข้าเป็น .ts
TS-Node แปลงไฟล์บางไฟล์และละเว้นไฟล์อื่น ๆ เราอ้างถึงกลไกนี้ว่า "การกำหนดขอบเขต" มีตัวเลือกต่าง ๆ ในการกำหนดค่าการกำหนดขอบเขตเพื่อให้ ts-node แปลงเฉพาะไฟล์ในโครงการของคุณ
คำเตือน:
ไฟล์ที่ถูกละเว้นยังสามารถดำเนินการได้โดย node.js การละเว้นไฟล์หมายความว่าเราไม่แปลงจาก typeScript เป็น JavaScript แต่ไม่ได้ป้องกันการดำเนินการ
หากไฟล์ต้องการการแปลง แต่ถูกละเว้นโหนดอาจล้มเหลวในการแก้ไขหรือพยายามเรียกใช้งานเป็นวานิลลาจาวาสคริปต์ สิ่งนี้อาจทำให้เกิดข้อผิดพลาดทางไวยากรณ์หรือความล้มเหลวอื่น ๆ เนื่องจากโหนดไม่เข้าใจไวยากรณ์ประเภท TypeScript หรือคุณสมบัติ ECMASCript ที่มีเลือดออก
.js และ .jsx จะถูกแปลงเฉพาะเมื่อเปิดใช้ allowJs เท่านั้น
.tsx และ .jsx จะถูกแปลงเมื่อเปิดใช้งาน jsx เท่านั้น
คำเตือน:
เมื่อใช้ TS-node กับ
allowJsไฟล์ JavaScript ที่ไม่ได้รับการแก้ไข ทั้งหมด จะถูกแปลงโดย TS-Node
node_modules โดยค่าเริ่มต้น TS-Node หลีกเลี่ยงการรวบรวมไฟล์ใน /node_modules/ ด้วยเหตุผลสามประการ:
หากคุณต้องการนำเข้า typescript ที่ไม่มีการรวบรวมใน node_modules ให้ใช้ --skipIgnore หรือ TS_NODE_SKIP_IGNORE เพื่อข้ามข้อ จำกัด นี้
หากไฟล์ JavaScript ที่คอมไพล์ที่มีชื่อเดียวกันกับไฟล์ typeScript มีอยู่แล้วไฟล์ typeScript จะถูกละเว้น TS-Node จะนำเข้า JavaScript ที่รวบรวมไว้ล่วงหน้า
ในการบังคับให้ TS-Node นำเข้าแหล่งที่มา typeScript ไม่ใช่ JavaScript ที่คอมไพล์อยู่ล่วงหน้าใช้ --preferTsExts
ตัวเลือก scope และ scopeDir ของเราจะ จำกัด การแปลงเป็นไฟล์ภายในไดเรกทอรี
ตัวเลือก ignore ของเราจะละเว้นไฟล์ที่ตรงกับการแสดงออกปกติอย่างน้อยหนึ่งรายการ
คุณสามารถใช้ ts-node ร่วมกับ tsconfig-paths เพื่อโหลดโมดูลตามส่วน paths ใน tsconfig.json
{
"ts-node" : {
// Do not forget to `npm i -D tsconfig-paths`
"require" : [ "tsconfig-paths/register" ]
}
} คู่มือ TypeScript อย่างเป็นทางการอธิบายวัตถุประสงค์ที่ตั้งใจไว้สำหรับ "paths" ใน "ธงการแก้ไขโมดูลเพิ่มเติม"
คอมไพเลอร์ TypeScript มีชุดของธงเพิ่มเติมเพื่อ แจ้ง คอมไพเลอร์ของการแปลงที่คาดว่าจะเกิดขึ้นกับแหล่งที่มาเพื่อสร้างผลลัพธ์สุดท้าย
เป็นสิ่งสำคัญที่จะต้องทราบว่าคอมไพเลอร์จะไม่ทำการเปลี่ยนแปลงใด ๆ เหล่านี้ เพียงแค่ใช้ข้อมูลชิ้นส่วนเหล่านี้เพื่อเป็นแนวทางในการแก้ไขโมดูลนำเข้าไปยังไฟล์นิยาม
ซึ่งหมายความว่า "paths" มีวัตถุประสงค์เพื่ออธิบายการแมปว่าเครื่องมือสร้างหรือรันไทม์ดำเนินการ อยู่แล้ว เพื่อไม่บอกเครื่องมือสร้างหรือรันไทม์วิธีการแก้ไขโมดูล กล่าวอีกนัยหนึ่งพวกเขาตั้งใจที่จะเขียนการนำเข้าของเราในวิธีที่ node เข้าใจแล้ว ด้วยเหตุผลนี้ TS-Node ไม่ได้แก้ไขพฤติกรรมการแก้ไขโมดูลของ node เพื่อใช้การแมป "paths"
บางโครงการต้องการคอมไพเลอร์ TypeScript ที่ได้รับการแก้ไขซึ่งเพิ่มคุณสมบัติเพิ่มเติม ตัวอย่างเช่น ttypescript และ ts-patch เพิ่มความสามารถในการกำหนดค่าหม้อแปลงที่กำหนดเอง นี่คือการเปลี่ยนแบบดรอปอินสำหรับโมดูล Vanilla 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 รองรับ transpilers ของบุคคลที่สามเป็นปลั๊กอิน transpilers เช่น SWC สามารถแปลง TypeScript เป็น JavaScript ได้เร็วกว่าคอมไพเลอร์ TypeScript คุณจะยังคงได้รับประโยชน์จากการค้นพบ tsconfig.json อัตโนมัติของ TS-NODE การสนับสนุน SOURCEMAP และ Global TS-Node CLI ปลั๊กอินจะได้รับการกำหนดค่าที่เหมาะสมจาก tsconfig.json ที่มีอยู่โดยอัตโนมัติซึ่งทำให้โครงการหม้อต้มของโครงการง่ายขึ้น
อะไรคือความแตกต่างระหว่างคอมไพเลอร์และ transpiler?
สำหรับวัตถุประสงค์ของเราคอมไพเลอร์ใช้ API ของ TypeScript และสามารถทำการ typechecking ได้ transpiler ของบุคคลที่สามไม่ได้ การแปลงทั้งสอง typenscript เป็น JavaScript
ตัวเลือก transpiler อนุญาตให้ใช้ปลั๊กอิน transpiler ของบุคคลที่สามกับ TS-Node transpiler จะต้องได้รับชื่อของโมดูลซึ่งสามารถ require() d ปลั๊กอิน swc ในตัวถูกเปิดเผยเป็น ts-node/transpilers/swc
ตัวอย่างเช่นหากต้องการใช้ " @cspotcode/fast-TS-compiler" สมมุติฐานก่อนอื่นให้ติดตั้งลงในโครงการของคุณ: npm install @cspotcode/fast-ts-compiler
จากนั้นเพิ่มสิ่งต่อไปนี้ใน tsconfig ของคุณ:
{
"ts-node" : {
"transpileOnly" : true ,
"transpiler" : "@cspotcode/fast-ts-compiler"
}
}หากต้องการเขียนปลั๊กอิน transpiler ของคุณเองให้ตรวจสอบเอกสาร API ของเรา
ปลั๊กอิน require() d โดย ts-node ดังนั้นพวกเขาจึงสามารถเป็นสคริปต์ท้องถิ่นหรือโมดูลโหนดที่เผยแพร่ไปยัง NPM โมดูลจะต้องส่งออกฟังก์ชั่น create ที่อธิบายโดยอินเตอร์เฟส TranspilerModule ของเรา create ถูกเรียกใช้โดย TS-Node เมื่อเริ่มต้นเพื่อสร้างอินสแตนซ์ transpiler หนึ่งอินสแตนซ์หรือมากกว่า อินสแตนซ์ที่ใช้ในการแปลง TypeScript เป็น JavaScript
สำหรับตัวอย่างการทำงานตรวจสอบปลั๊กอิน SWC ที่รวมกันของเรา: https://github.com/typestrong/ts-node/blob/main/src/transpilers/swc.ts
หากเป็นไปได้ขอแนะนำให้ใช้โหมด
NodeNextหรือNode16ของ TypeScript แทนตัวเลือกที่อธิบายไว้ในส่วนนี้ การตั้งค่า"module": "NodeNext"และการใช้ส่วนขยายไฟล์.ctsควรทำงานได้ดีสำหรับโครงการส่วนใหญ่
เมื่อตัดสินใจว่าควรรวบรวมและดำเนินการไฟล์อย่างไร-เป็น MONAMJS หรือโมดูล ECMASCRIPT แบบดั้งเดิม-TS-NODE ตรงกับพฤติกรรม node และ tsc ซึ่งหมายความว่าไฟล์ typescript จะถูกแปลงตามตัวเลือก tsconfig.json "module" ของคุณและดำเนินการตามกฎของโหนดสำหรับฟิลด์ package.json "type" ตั้งค่า "module": "NodeNext" และทุกอย่างควรทำงาน
ในบางกรณีคุณอาจต้องแทนที่พฤติกรรมนี้สำหรับบางไฟล์ ตัวอย่างเช่นเครื่องมือบางอย่างอ่าน name-of-tool.config.ts และกำหนดให้ไฟล์นั้นดำเนินการเป็น CommonJs หากคุณมี package.json ที่กำหนดค่าด้วย "type": "module" และ tsconfig.json ด้วย "module": "esnext" การกำหนดค่าเป็น ecmascript ดั้งเดิมโดยค่าเริ่มต้นและจะเพิ่มข้อผิดพลาด คุณจะต้องบังคับให้กำหนดค่าและสคริปต์ที่สนับสนุนใด ๆ เพื่อดำเนินการเป็น CommonJS
ในสถานการณ์เหล่านี้ตัวเลือก moduleTypes ของเราสามารถแทนที่ไฟล์บางไฟล์ให้เป็น CommonJS หรือ ESM การเอาชนะที่คล้ายกันนั้นเป็นไปได้โดยใช้ .mts , .cts , .cjs และ .mjs ขยายไฟล์ moduleTypes ได้รับเอฟเฟกต์เดียวกันสำหรับไฟล์ .ts และ .js และ แทนที่โมดูล tsconfig.json "module" การกำหนดค่าอย่างเหมาะสม
ตัวอย่างต่อไปนี้บอกให้ TS-Node ดำเนินการ config webpack เป็น 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"
}
} แต่ละคีย์เป็นรูปแบบ GLOB ที่มีไวยากรณ์เดียวกับอาร์เรย์ "include" ของ TSCONFIG เมื่อหลายรูปแบบตรงกับไฟล์เดียวกันรูปแบบสุดท้ายจะมีความสำคัญ
cjs แทนที่ตรงกับไฟล์เพื่อรวบรวมและดำเนินการเป็น CommonJSesm Overrides จับคู่ไฟล์เพื่อรวบรวมและดำเนินการเป็นโมดูล ECMASCRIPT แบบดั้งเดิมpackage รีเซ็ตอย่างใดอย่างหนึ่งเป็นพฤติกรรมเริ่มต้นซึ่งเป็นไปตาม package.json "type" และตัวเลือก tsconfig.json "module" ไฟล์ที่มีประเภทโมดูลที่ถูกแทนที่จะถูกแปลงด้วยข้อ จำกัด เช่นเดียวกับ isolatedModules สิ่งนี้จะส่งผลกระทบต่อกรณีที่หายากเช่นการใช้ const enum s กับ preserveConstEnums ปิดใช้งาน
คุณลักษณะนี้มีวัตถุประสงค์เพื่ออำนวยความสะดวกในสถานการณ์ที่ไม่สามารถกำหนดค่า compilerOptions และ package.json ได้ ตัวอย่างเช่น webpack.config.ts ไม่สามารถได้รับ package.json ของตัวเอง json เพื่อแทนที่ "type" ทุกที่ที่เป็นไปได้คุณควรชอบใช้ package.json แบบดั้งเดิม JSON และ tsconfig.json การกำหนดค่า
API ที่สมบูรณ์ของ TS-Node ได้รับการบันทึกไว้ที่นี่: เอกสาร API
นี่คือไฮไลท์บางประการของสิ่งที่คุณสามารถทำได้:
create() สร้างบริการคอมไพเลอร์ของ TS-Node โดยไม่ต้องลงทะเบียนตะขอใด ๆcreateRepl() สร้างอินสแตนซ์ของบริการ REPL ของเราดังนั้นคุณสามารถสร้าง REPL ที่ใช้พลังงานจาก TypeScript ของคุณเองcreateEsmHooks() สร้างตะขอ ESM Loader ของเราเหมาะสำหรับการแต่งกับรถตักอื่น ๆ หรือเพิ่มด้วยคุณสมบัติเพิ่มเติมTS-Node มุ่งเน้นไปที่การเพิ่มการสนับสนุน typescript ชั้นหนึ่งลงในโหนด การดูไฟล์และการโหลดซ้ำรหัสไม่ได้อยู่ในขอบเขตสำหรับโครงการ
หากคุณต้องการรีสตาร์ทกระบวนการ ts-node ในการเปลี่ยนแปลงไฟล์เครื่องมือ Node.js ที่มีอยู่เช่น Nodemon, Onchange และ Node-Dev ทำงาน
นอกจากนี้ยังมี ts-node-dev รุ่นที่แก้ไขของ node-dev โดยใช้ ts-node สำหรับการรวบรวมที่จะรีสตาร์ทกระบวนการในการเปลี่ยนแปลงไฟล์ โปรดทราบว่า ts-node-dev ไม่เข้ากันกับตัวโหลด ESM ดั้งเดิมของเรา
สมมติว่าคุณกำลังกำหนดค่า ava ผ่าน package.json ของคุณเพิ่มหนึ่งในการกำหนดค่าต่อไปนี้
ใช้การกำหนดค่านี้หาก 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-Node นั้นอยู่ในอึก
# Create a `gulpfile.ts` and run `gulp`.
gulpดูเพิ่มเติมที่: https://gulpjs.com/docs/en/getting-started/javascript-and-gulpfiles#transpilation
สร้างการกำหนดค่า node.js ใหม่และเพิ่ม -r ts-node/register เป็น "พารามิเตอร์โหนด"
หมายเหตุ: หากคุณใช้อาร์กิวเมนต์บรรทัดคำสั่ง --project <tsconfig.json> ตามตัวเลือกการกำหนดค่าและต้องการใช้พฤติกรรมเดียวกันนี้เมื่อเปิดตัวใน Intellij ให้ระบุภายใต้ "ตัวแปรสภาพแวดล้อม": TS_NODE_PROJECT=<tsconfig.json>
mocha --require ts-node/register --extensions ts,tsx --watch --watch-files src ' tests/**/*.{ts,tsx} ' [...args]หรือระบุตัวเลือกผ่านไฟล์กำหนดค่ามอคค่าของคุณ
{
// 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 ใหม่เพิ่ม -r ts-node/register ไปยังโหนด args และย้าย program ไปยังรายการ args (ดังนั้นรหัส VS ไม่ได้มองหา 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 มิกซ์
TS-Node รวมซอร์สโค้ดจาก node.js ซึ่งได้รับอนุญาตภายใต้ใบอนุญาต MIT ข้อมูลใบอนุญาต node.js
TS-Node รวมถึงซอร์สโค้ดจากคอมไพเลอร์ TypeScript ซึ่งได้รับอนุญาตภายใต้ Apache License 2.0 ข้อมูลใบอนุญาต TypeScript