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 มีสคริปต์
preparedependenciesและdevDependenciesของมันจะถูกติดตั้ง และสคริปต์ prepare จะถูกเรียกใช้งาน ก่อนที่แพ็กเกจจะถูกบรรจุและติดตั้ง
โดยการเปลี่ยนจาก build ที่ดูเหมือนธรรมดาไปเป็น prepare เพื่อวัตถุประสงค์ในการแปลง TypeScript เป็น JavaScript จะทำให้เราไม่ต้องแปลงโค้ดด้วยตนเองอีกต่อไป และสามารถติดตั้งโปรเจกต์ TypeScript เป็น dependency ของ git ได้อย่างราบรื่น ทำไมโปรเจกต์ TypeScript จึงไม่ใช้ prepare เพื่อรัน tsc?
เหตุผลที่อาจใช้ build คือเพื่อให้เข้ากันได้กับตัวจัดการแพ็กเกจอื่น ๆ; Yarn ไม่สนับสนุน prepare แล้ว และ pnpm ก็ไม่เช่นกัน อย่างไรก็ตาม โครงการจะต้องยึดมั่นกับตัวจัดการแพ็กเกจหนึ่ง ๆ การเปลี่ยนไปใช้ตัวจัดการแพ็กเกจอื่นจะต้องแปลงไฟล์ล็อก รวมถึงเรื่องอื่น ๆ