ข้ามไปยังเนื้อหา

Ecosystem และ Toolchain

TypeScript ไม่ได้รับการรองรับโดยตรงจาก Node.js — ต้องถูก strip หรือ compile ก่อน คุณมีตัวเลือกหลักสามตัวใน ecosystem สมัยใหม่:

Node สามารถลบ type annotations ของ TypeScript ออกเมื่อ startup โดยไม่ต้องใช้ package เพิ่ม แต่ ไม่ได้ตรวจสอบ type — แค่ลบ types แล้วรัน JavaScript:

Terminal window
# Node 22 — stable
node --experimental-strip-types src/app.ts
# Node 20.6+
node --experimental-strip-types --input-type=module src/app.ts

ข้อจำกัด: ไม่รองรับ enum, namespace, experimentalDecorators สำหรับฟีเจอร์เหล่านั้นให้ใช้ tsx หรือ ts-node

tsx เป็น wrapper เบา ๆ รอบ esbuild รองรับ TypeScript ทุกฟีเจอร์และเริ่มในเวลามิลลิวินาที:

Terminal window
# รันครั้งเดียว
npx tsx src/app.ts
# Watch mode — auto-restart เมื่อไฟล์เปลี่ยน
npx tsx watch src/app.ts
# ติดตั้งเป็น dev dependency
npm install --save-dev tsx

ts-node เป็นมาตรฐานมาหลายปี หนักกว่า tsx แต่มี configuration support ที่ครบครัน:

Terminal window
npm install --save-dev ts-node typescript
# รันไฟล์
npx ts-node src/app.ts
# ESM mode (tsconfig ต้องมี "module": "NodeNext")
npx ts-node --esm src/app.ts
Terminal window
# ติดตั้ง ESLint พร้อม TypeScript support
npm install --save-dev eslint @eslint/js typescript-eslint
# สร้าง flat config (eslint.config.mjs)
# จากนั้นรัน:
npx eslint src/
# Auto-fix ปัญหาที่แก้ได้อัตโนมัติ
npx eslint --fix src/

eslint.config.mjs พื้นฐานสำหรับ TypeScript:

eslint.config.mjs
import js from '@eslint/js';
import tseslint from 'typescript-eslint';
export default tseslint.config(
js.configs.recommended,
...tseslint.configs.recommended,
);
Terminal window
npm install --save-dev prettier
# Format ไฟล์ทั้งหมด
npx prettier --write .
# ตรวจสอบ formatting โดยไม่เปลี่ยนไฟล์ (สำหรับ CI)
npx prettier --check .

Prettier และ ESLint มุ่งเน้นคนละด้าน: Prettier จัดการ formatting (ช่องว่าง, quotes, semicolons) ส่วน ESLint จัดการ logic และ style rules รันทั้งคู่ตามลำดับหรือใช้ eslint-config-prettier เพื่อปิด formatting rules ของ ESLint

Biome แทนที่ ESLint + Prettier ด้วยเครื่องมือเดียวที่เร็วเขียนด้วย Rust:

Terminal window
npm install --save-dev @biomejs/biome
npx biome init
# Lint และ format ในรอบเดียว
npx biome check --apply src/
Terminal window
# Restart เมื่อไฟล์เปลี่ยน — ไม่ต้องติดตั้งอะไร
node --watch src/app.js
# Watch ไฟล์เฉพาะ
node --watch-path=src src/app.js
Terminal window
npm install --save-dev nodemon
# ใช้งานพื้นฐาน
npx nodemon src/app.js
# กับ TypeScript ผ่าน tsx
npx nodemon --exec "npx tsx" src/app.ts
# nodemon.json config
{
"watch": ["src"],
"ext": "ts,js,json",
"exec": "npx tsx src/app.ts"
}
Terminal window
# โหลด .env โดยไม่ต้องใช้ dotenv
node --env-file=.env src/app.js
# โหลด env files หลายไฟล์ (ไฟล์หลังจะ override ไฟล์ก่อน)
node --env-file=.env --env-file=.env.local src/app.js
Terminal window
npm install dotenv
// src/app.js — โหลดที่บรรทัดแรกสุด
import 'dotenv/config';
console.log(process.env.DATABASE_URL); // จาก .env
Terminal window
# .env — ค่า default, commit ใน git (ไม่มี secrets)
NODE_ENV=development
PORT=3000
LOG_LEVEL=info
# .env.local — overrides เฉพาะเครื่อง, ไม่ commit (ใน .gitignore)
DATABASE_URL=postgres://localhost:5432/mydb
SECRET_KEY=dev-only-secret
# .env.example — template แสดง vars ที่ต้องการ, commit ไว้
DATABASE_URL=
SECRET_KEY=

เพิ่ม .env.local และ .env*.local ใน .gitignore เสมอ ห้าม commit secrets จริง ๆ

{
"scripts": {
"dev": "tsx watch src/app.ts",
"build": "tsc --noEmit",
"start": "node dist/app.js",
"test": "node --test",
"lint": "eslint src/ && prettier --check .",
"format": "prettier --write . && eslint --fix src/"
}
}
`node --experimental-strip-types` ทำอะไร?
ความแตกต่างหลักระหว่าง Prettier และ ESLint คืออะไร?
flag ใดใน Node.js ที่เปิด built-in watch mode (ไม่ต้องใช้ nodemon)?
flag ใดใน Node 20.6+ ที่โหลดไฟล์ `.env` โดยไม่ต้องใช้ package `dotenv`?