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

โมดูล & npm

Node.js มาพร้อมกับระบบโมดูลสองแบบ CommonJS (CJS) คือระบบดั้งเดิมที่ใช้ require() สำหรับโหลดโมดูลแบบ synchronous ECMAScript Modules (ESM) คือมาตรฐานสมัยใหม่ที่ใช้ร่วมกับ browser และใช้คำสั่ง import / export

ทั้งสองระบบได้รับการรองรับอย่างสมบูรณ์ใน Node.js เวอร์ชันปัจจุบัน ไฟล์จะใช้ระบบใดขึ้นอยู่กับนามสกุลไฟล์และฟิลด์ "type" ใน package.json ที่ใกล้ที่สุด

CommonJSESM
ไวยากรณ์require() / module.exportsimport / export
นามสกุลไฟล์.js (ค่าเริ่มต้น) หรือ .cjs.mjs หรือ .js เมื่อ "type": "module"
"type" ใน package.json"commonjs" (หรือไม่มี)"module"
การโหลดSynchronousAsynchronous (static analysis)
Top-level awaitไม่รองรับรองรับ
บทเรียนหัวข้อ
ภาพรวม (หน้านี้)การเปรียบเทียบ CJS กับ ESM และพื้นฐานระบบโมดูล
เจาะลึก package.jsonฟิลด์สำคัญ, semver ranges, และ npm init
การค้นหาโมดูลวิธีที่ Node ค้นหาไฟล์, exports map, และ bare specifiers
การจัดการ Dependenciesการติดตั้ง, อัปเดต, และตรวจสอบแพ็คเกจด้วย npm
การเผยแพร่แพ็คเกจการเตรียมและเผยแพร่แพ็คเกจไปยัง npm registry

โค้ดด้านล่างใช้ ESM import เพื่อโหลดโมดูลในตัวอย่าง path และแสดงตัวคั่นเส้นทางของแพลตฟอร์ม — ตัวอักษรที่ Node ใช้ระหว่างส่วนประกอบไดเรกทอรี (/ บน Unix, \ บน Windows):

Node.js

Needs the Node.js runtime — open in StackBlitz to run.

CommonJS ใช้ไวยากรณ์อะไรในการโหลดโมดูลอื่น?
นามสกุลไฟล์อะไรที่บังคับให้ไฟล์ถูกถือว่าเป็น ES module เสมอ โดยไม่คำนึงถึง package.json?
ฟิลด์ใดใน package.json ที่สลับทั้งแพ็คเกจไปใช้ ESM เพื่อให้ไฟล์ .js ถูกถือว่าเป็น ES modules?