ตั้งแต่ Node.js เวอร์ชัน 23.6.0 เป็นต้นมา นักพัฒนาสามารถรันไฟล์ TypeScript ได้ทันทีด้วยคำสั่ง node app.ts โดยไม่ต้องคอมไพล์เป็น JavaScript ก่อน บทความนี้อธิบายวิธีใช้งาน ข้อจำกัดที่ต้องรู้ และแนวทางปฏิบัติสำหรับ Production อย่างละเอียด
Type Stripping คือเบื้องหลังที่ทำให้ทุกอย่างเป็นไปได้
Node.js ไม่ได้เพิ่ม TypeScript Compiler เข้ามาในตัว แต่ใช้เทคนิคที่เรียกว่า Type Stripping ซึ่งทำหน้าที่ลบ Type Annotation ทั้งหมดออกจากโค้ด แล้วรันส่วนที่เหลือเป็น JavaScript ทันที วิธีนี้ทำให้ไม่ต้องตั้งค่า Build Pipeline ซับซ้อนเหมือนก่อน และ Cold Start เร็วกว่าการใช้ tsc คอมไพล์ก่อนรัน
การเปลี่ยนแปลงนี้ถือเป็นจุดเปลี่ยนสำคัญที่ทำให้ TypeScript เข้าถึงได้ง่ายขึ้นสำหรับนักพัฒนาทุกระดับ
ไฟล์ที่รองรับและไม่รองรับ
Node.js รองรับไฟล์ TypeScript หลายรูปแบบ ได้แก่ .ts สำหรับ TypeScript มาตรฐาน, .mts สำหรับ ES Module และ .cts สำหรับ CommonJS ที่เขียนด้วย TypeScript
สิ่งที่ยังไม่รองรับคือไฟล์ .tsx สำหรับ React JSX หากต้องการใช้ JSX ยังต้องพึ่งเครื่องมือคอมไพล์ตามปกติ นอกจากนี้ฟีเจอร์ TypeScript บางอย่างเช่น Decorators, const enum และ Private Fields แบบ TypeScript ก็ยังไม่รองรับ
วิธีเริ่มใช้งาน TypeScript บน Node.js โดยตรง
เริ่มต้นได้ทันทีเพียงตรวจสอบว่าใช้ Node.js 23.6.0 ขึ้นไป แล้วรัน node app.ts ได้เลย สำหรับโปรเจกต์ที่ใช้ ES Module ต้องตั้ง type เป็น module ใน package.json
ใช้ --watch flag เพื่อให้ Node.js รีโหลดอัตโนมัติเมื่อแก้ไขไฟล์ ซึ่งสะดวกมากระหว่างพัฒนา สำหรับการ Import ไฟล์ TypeScript อื่น ต้องระบุ Extension .ts ให้ครบทุกครั้ง การ Import แบบไม่ระบุ Extension จะเกิด Error
ข้อจำกัดที่นักพัฒนาต้องเข้าใจ
ข้อจำกัดสำคัญที่สุดคือ Node.js ไม่ได้ทำ Type Checking เลย มันแค่ลบ Type แล้วรัน JavaScript ที่เหลือ หาก Type ผิด Node.js จะไม่แจ้งเตือน ต้องรัน tsc --noEmit แยกต่างหากเพื่อตรวจสอบ
นอกจากนี้ tsconfig.json จะถูกข้ามไปทั้งหมด Node.js ไม่อ่านค่าตั้งค่าจากไฟล์นี้ ดังนั้นการตั้งค่า Compiler Options ต่าง ๆ จะไม่มีผลเมื่อรันด้วย node โดยตรง
แนวทางปฏิบัติสำหรับ Production
สำหรับ Production แนะนำให้ยังคงใช้กระบวนการ Build ตามปกติ ใช้ tsc คอมไพล์เป็น JavaScript แล้วรัน node dist/index.js เพราะ Production ต้องการความเสถียรและต้องผ่าน Type Check อย่างถี่ถ้วน
กระบวนการที่แนะนำคือใช้ node app.ts ระหว่างพัฒนาเพื่อความรวดเร็ว ใช้ tsc --noEmit ใน CI/CD เพื่อตรวจสอบ Type และใช้ tsc เพื่อ Build สำหรับ Production
สำหรับทีมที่ต้อง Deploy แอปพลิเคชัน Node.js บนเซิร์ฟเวอร์ VPS ควรตั้งค่า CI/CD Pipeline ที่มีทั้ง Type Check และ Build ก่อน Deploy
ประสิทธิภาพเทียบกับวิธีอื่น
การรัน node app.ts โดยตรงมี Cold Start เร็วที่สุดประมาณ 25ms และใช้ RAM ประมาณ 80MB ไม่ต้องมีขั้นตอน Build การใช้ tsc คอมไพล์ก่อนมี Cold Start ประมาณ 35ms ใช้ RAM 75MB แต่มีข้อดีคือผ่าน Type Check ส่วน tsx Runtime Compiler มี Cold Start ประมาณ 45ms และใช้ RAM 120MB
สำหรับ Development ที่ต้องการ Iteration เร็ว การรันตรงเป็นตัวเลือกที่ดีที่สุด แต่สำหรับ Production ความปลอดภัยจาก Type Check คุ้มค่ากับเวลาเพิ่มเพียงเล็กน้อย
ขั้นตอน Migrate โปรเจกต์เดิม
สำหรับโปรเจกต์ที่ต้องการเปลี่ยนมาใช้ฟีเจอร์ใหม่ ขั้นตอนหลักคืออัปเดต Node.js ให้เป็น 23.6.0 ขึ้นไป ตั้ง type เป็น module ใน package.json ปรับ Import ทุกจุดให้ระบุ Extension .ts ตั้ง tsc --noEmit สำหรับ Type Check และเริ่มใช้ node app.ts สำหรับการพัฒนา
คำถามที่พบบ่อย (FAQ)
Node.js รัน TypeScript ได้โดยไม่ต้องติดตั้งอะไรเพิ่มเลยหรือ?
ใช่ ตั้งแต่เวอร์ชัน 23.6.0 ขึ้นไป ไม่ต้องติดตั้ง Package เพิ่ม แต่ยังแนะนำให้ติดตั้ง typescript เพื่อใช้ tsc --noEmit ตรวจสอบ Type
ใช้แทน ts-node หรือ tsx ได้เลยไหม?
สำหรับ Development ได้เลย แต่ข้อจำกัดคือไม่รองรับ tsconfig.json และบางฟีเจอร์ TypeScript หากโปรเจกต์ใช้ Decorators หรือ Path Aliases ยังต้องพึ่ง ts-node
Production ควรใช้ node app.ts ตรง ๆ ไหม?
ไม่แนะนำ เพราะไม่มี Type Check และไม่อ่าน tsconfig.json สำหรับ Production ควร Build ด้วย tsc แล้วรัน JavaScript ที่ได้
สำหรับทีมที่ต้องการเซิร์ฟเวอร์สำหรับ Deploy แอปพลิเคชัน Node.js การเลือกระบบ Hosting ที่รองรับ Node.js เวอร์ชันล่าสุดจะทำให้ใช้ประโยชน์จากฟีเจอร์ใหม่ได้อย่างเต็มที่ ติดต่อ DriteStudio เพื่อเริ่มต้นวันนี้
