javascript - วิธีปิดการใช้นามสกุลไฟล์ (".js") สำหรับ import/export ในโปรเจกต์ ES6?
ฉันมีโมดูล ts ฉันกำลังคอมไพล์โมดูลนี้ไปยังโฟลเดอร์เฉพาะของโปรเจกต์อื่นโดยใช้ outDir ใน tsconfig.json และคำสั่ง tsc -w ดังนั้น ทุกครั้งที่ฉันอัปเดตโมดูล ts มันจะคอมไพล์ไฟล์ไปยังโปรเจกต์อื่น แต่ลืมนามสกุลไฟล์ขณะนำเข้า ซึ่งหมายความว่าฉันต้องอัปเดตนามสกุลทั้งหมดด้วยตนเองทุกครั้งเพราะมันเป็นสิ่งจำเป็นใช่หรือไม่??
ดังนั้น ผมจึงค้นหาวิธีการคอมไพล์ไฟล์ ts ที่มีนามสกุลไฟล์แต่ไม่พบอะไร จากนั้น ผมก็ค้นหาวิธีปิดการใช้นามสกุลไฟล์ (".js") ที่จำเป็นสำหรับการ import/export ในโปรเจกต์ ES6 ผมพบสิ่งนี้:
...กำหนดค่าเซิร์ฟเวอร์ของคุณให้ละเว้นนามสกุล...
แต่เขาไม่ได้บอกวิธีการตั้งค่า
แก้ไข :
ฉันกำลังรันโปรเจกต์ของฉันด้วย nodemon src/index.js
และเมื่อไฟล์ js ถูกสร้างขึ้นโดยมีการ import โดยไม่มีนามสกุล นี่คือข้อผิดพลาดที่ nodemon ให้:
[nodemon] restarting due to changes...
[nodemon] starting `node src/index.js`
internal/process/esm_loader.js:74
internalBinding('errors').triggerUncaughtException(
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\......\trendyol' imported from C:\Users\.......\index.js
at finalizeResolution (internal/modules/esm/resolve.js:276:11)
at moduleResolve (internal/modules/esm/resolve.js:699:10)
at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
at Loader.resolve (internal/modules/esm/loader.js:86:40)
at Loader.getModuleJob (internal/modules/esm/loader.js:230:28)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
at link (internal/modules/esm/module_job.js:55:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
[nodemon] app crashed - waiting for file changes before starting...
แต่เมื่อฉันเพิ่มนามสกุล (js) มันก็ทำงานตามที่คาดไว้
คำตอบ #1
เพราะเส้นทางการนำเข้าแบบสัมพัทธ์จำเป็นต้องมีนามสกุลเต็มใน ESM (เราต้องเขียน import "./foo.js" แทนที่จะเป็น import "./foo")
ดังนั้นคุณจึงมีวิธีแก้ปัญหา 2 แบบ
- เพิ่มนามสกุล
.jsให้กับไฟล์ที่นำเข้า
หรือ
- ใช้
--experimental-specifier-resolution=nodeเพื่อข้ามการตรวจสอบนามสกุลในเวลา runtime
คำตอบ #2
คุณสามารถทำสิ่งนี้ได้โดยการเพิ่ม --experimental-modules --es-module-specifier-resolution=node ลงในสคริปต์เริ่มต้นของคุณใน package.json:
"scripts": {
"start": "nodemon --experimental-modules --es-module-specifier-resolution=node index.js"
},
