ค้นหาเว็บไซต์

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 แบบ

  1. เพิ่มนามสกุล .js ให้กับไฟล์ที่นำเข้า

หรือ

  1. ใช้ --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"
  },

บทความที่เกี่ยวข้อง