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

node.js - ทำไมไม่แปลง TypeScript ด้วยสคริปต์วงจรชีวิต `prepare` ของ npm?


ข้อจำกัดความรับผิด: ฉันเป็นผู้เริ่มต้นทั้งใน JavaScript และ TypeScript

หลายโครงการ TypeScript จะมีสคริปต์ที่เรียกว่า build ใน package.json ของพวกเขา สคริปต์นี้มีไว้เพื่อแปลงโค้ดเป็น JavaScript โดยการเรียกใช้ tsc:

{
    "name": "my-typescript-project",
    "devDependencies": {
        "typescript": "^5.1.3",
        …
    },
    "scripts": {
        "build": "tsc",
        …
    }
    …
}

เนื่องจาก build ไม่ใช่สคริปต์ในวัฏจักรชีวิตของ npm จึงไม่ได้ถูกเรียกใช้อย่างอัตโนมัติ แต่จะต้องถูกเรียกใช้งานด้วยตนเองโดยใช้คำสั่ง npm run-script

ตั้งแต่เวอร์ชัน 4.0.0 เป็นต้นมา npm รองรับสคริปต์วงจรชีวิตที่เรียกว่า prepare ซึ่งจะถูกดำเนินการในเวลาต่อไปนี้:

  • ทำงานก่อนที่แพ็กเกจจะถูกบรรจุ กล่าวคือ ระหว่าง npm publish และ npm pack
  • ทำงานบน npm install ท้องถิ่นโดยไม่ต้องมีอาร์กิวเมนต์ใด ๆ
  • ทำงานหลังจาก prepublish แต่ก่อน prepublishOnly
  • หมายเหตุ: หากแพ็กเกจที่กำลังติดตั้งผ่าน git มีสคริปต์ prepare dependencies และ devDependencies ของมันจะถูกติดตั้ง และสคริปต์ prepare จะถูกเรียกใช้งาน ก่อนที่แพ็กเกจจะถูกบรรจุและติดตั้ง

โดยการเปลี่ยนจาก build ที่ดูเหมือนธรรมดาไปเป็น prepare เพื่อวัตถุประสงค์ในการแปลง TypeScript เป็น JavaScript จะทำให้เราไม่ต้องแปลงโค้ดด้วยตนเองอีกต่อไป และสามารถติดตั้งโปรเจกต์ TypeScript เป็น dependency ของ git ได้อย่างราบรื่น ทำไมโปรเจกต์ TypeScript จึงไม่ใช้ prepare เพื่อรัน tsc?

เหตุผลที่อาจใช้ build คือเพื่อให้เข้ากันได้กับตัวจัดการแพ็กเกจอื่น ๆ; Yarn ไม่สนับสนุน prepare แล้ว และ pnpm ก็ไม่เช่นกัน อย่างไรก็ตาม โครงการจะต้องยึดมั่นกับตัวจัดการแพ็กเกจหนึ่ง ๆ การเปลี่ยนไปใช้ตัวจัดการแพ็กเกจอื่นจะต้องแปลงไฟล์ล็อก รวมถึงเรื่องอื่น ๆ

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