Astra: เครื่องมือแปลง JavaScript เป็นไฟล์ปฏิบัติการ จุดประเด็นถกเถียงเรื่องคำว่า "คอมไพเลอร์"

BigGo Editorial Team
Astra: เครื่องมือแปลง JavaScript เป็นไฟล์ปฏิบัติการ จุดประเด็นถกเถียงเรื่องคำว่า "คอมไพเลอร์"

Astra เครื่องมือใหม่สำหรับแปลงแอปพลิเคชัน JavaScript เป็นไฟล์ปฏิบัติการแบบสแตนด์อโลนได้จุดประเด็นถกเถียงอย่างคึกคักในชุมชนนักพัฒนาเกี่ยวกับคำศัพท์และแนวทางทางเทคนิคเบื้องหลังโซลูชันการแพ็กเกจ JavaScript เครื่องมือนี้ซึ่งแปลงโค้ด JavaScript และ TypeScript ให้เป็นไฟล์ปฏิบัติการบน Windows ได้รับความสนใจจากแนวทางที่ทันสมัยโดยใช้ Node.js Single Executable Applications (SEA)

ข้อถกเถียงเรื่องคอมไพเลอร์

หนึ่งในประเด็นถกเถียงที่ร้อนแรงที่สุดเกี่ยวกับ Astra คือการที่มันเรียกตัวเองว่าเป็นคอมไพเลอร์ นักพัฒนาหลายคนมีปัญหากับคำศัพท์นี้ โดยโต้แย้งว่า Astra ไม่ได้ทำงานแบบการคอมไพล์แบบดั้งเดิม เช่น การแยกวิเคราะห์ การจัดสรรรีจิสเตอร์ หรือการเชื่อมโยงที่เป็นลักษณะของคอมไพเลอร์จริงๆ

นี่ไม่ใช่คอมไพเลอร์ มันไม่ได้ทำการแปลงโปรแกรมใดๆ ไม่มีการจัดสรรรีจิสเตอร์ ไม่มีการแยกวิเคราะห์ ไม่มีการเชื่อมโยง มันไม่เหมือนคอมไพเลอร์แต่อย่างใด

ผู้สร้าง Astra ที่รู้จักกันในชื่อ QwertyCodeQC ยอมรับความแตกต่างทางเทคนิคนี้ แต่ปกป้องการเลือกใช้คำศัพท์ว่าเป็นสิ่งที่เข้าถึงได้ง่ายกว่าสำหรับนักพัฒนา JavaScript ทั่วไปที่เชื่อมโยงคำว่าคอมไพเลอร์กับการแปลงโค้ดต้นฉบับให้เป็นไบนารีเดียว สมาชิกในชุมชนบางคนแนะนำคำทางเลือกเช่น bundler, packager หรือ js-to-exe tool ว่าอาจจะอธิบายฟังก์ชันการทำงานของ Astra ได้แม่นยำกว่า

แนวทางทางเทคนิคและความแตกต่าง

สิ่งที่ทำให้ Astra แตกต่างจากเครื่องมือที่คล้ายกันเช่น pkg หรือ nexe คือการใช้ฟีเจอร์ Single Executable Applications (SEA) อย่างเป็นทางการของ Node.js ในขณะที่เครื่องมือเก่ารองรับเฉพาะ Node.js เวอร์ชันเก่า (ประมาณ v14) Astra ทำงานกับเวอร์ชันล่าสุดโดยใช้ความสามารถที่ได้รับการสนับสนุนอย่างเป็นทางการนี้

ขั้นตอนการทำงานนั้นตรงไปตรงมา: โค้ดถูกรวมด้วย esbuild แปลงเป็น blob ที่ถูกฉีดเข้าไปในไบนารีของ Node.js เพิ่มเมตาดาต้า (รวมถึงไอคอนและข้อมูลลิขสิทธิ์) และสุดท้าย เครื่องมือ postject จะฉีด blob เข้าไปในไฟล์ปฏิบัติการ แนวทางนี้ช่วยให้ Astra รองรับฟีเจอร์ ECMAScript สมัยใหม่ รวมถึงการนำเข้าแบบ ESM ซึ่งเป็นปัญหาในโซลูชันอื่นๆ

คุณสมบัติของ Astra

  • ใช้ esbuild สำหรับการรวมโค้ดและการสร้างที่รวดเร็ว
  • ใช้ประโยชน์จาก Node.js Single Executable Applications (SEA)
  • รองรับ ECMAScript Modules (ESM)
  • สร้างไฟล์ .exe แบบสแตนด์อโลนที่รวมทุกการพึ่งพาไว้ด้วยกัน
  • อนุญาตให้ปรับแต่งข้อมูลเมตาของไฟล์ที่ประมวลผลได้ (ไอคอน, ชื่อ, เวอร์ชัน)
  • มีการบีบอัดในตัว
  • ปัจจุบันรองรับเฉพาะ Windows (กำลังพัฒนาสำหรับ macOS และ Linux)
  • ขนาดไฟล์ที่ประมวลผลได้โดยเฉลี่ย: 70-80MB
แนวทางนวัตกรรมของ Astra เน้นความทันสมัยและประสิทธิภาพในโซลูชันการแพ็คเกจ JavaScript
แนวทางนวัตกรรมของ Astra เน้นความทันสมัยและประสิทธิภาพในโซลูชันการแพ็คเกจ JavaScript

ข้อพิจารณาด้านขนาด

ขนาดของไฟล์ปฏิบัติการที่ได้ก็กลายเป็นหัวข้อในการสนทนาเช่นกัน Astra สร้างไบนารีที่มีขนาดเฉลี่ย 70-80MB ซึ่งผู้สร้างอธิบายว่าเบากว่าคอมไพเลอร์ส่วนใหญ่ คำกล่าวนี้ทำให้นักพัฒนาบางคนตั้งคำถามว่าอะไรคือ เบา ในระบบนิเวศ JavaScript ยุคปัจจุบัน

ผู้แสดงความคิดเห็นคนหนึ่งได้กล่าวอย่างขบขันถึงมุมมองที่เปลี่ยนไปเกี่ยวกับขนาดไฟล์ในยุคที่โฟลเดอร์ node_modules มีขนาดเป็นกิกะไบต์ คนอื่นๆ ชี้ให้เห็นว่าโซลูชันคู่แข่งเช่นฟีเจอร์การสร้างไฟล์ปฏิบัติการของ Bun อาจสร้างไฟล์ที่เล็กกว่าเล็กน้อย แม้ว่าจะยังคงมีขนาดใหญ่เมื่อเทียบกับภาษาที่คอมไพล์แบบดั้งเดิม

นักพัฒนาบางคนตั้งคำถามว่าไฟล์ปฏิบัติการขนาดใหญ่เช่นนี้มีความเหมาะสมสำหรับแอปพลิเคชันที่เรียบง่ายหรือไม่ โดยแนะนำว่าโอเวอร์เฮดส่วนใหญ่มาจากการรวม Node.js รันไทม์ทั้งหมดและไลบรารีสนับสนุนเช่น ICU สำหรับการแสดงผลภาษาท้องถิ่น

ตัวเลือกการติดตั้ง

 การติดตั้งแบบทั่วไป
npm i -g astra-cli
yarn global add astra-cli
pnpm add -g astra-cli

 การติดตั้งสำหรับโปรเจกต์
npm i --save-dev astra-cli
yarn add --dev astra-cli
pnpm add -D astra-cli

กรณีการใช้งานและข้อจำกัด

Astra ถูกออกแบบมาเฉพาะสำหรับอินเตอร์เฟซคอมมานด์ไลน์ (CLIs) และแอปพลิเคชันเซิร์ฟเวอร์ที่สร้างด้วยเฟรมเวิร์คเช่น Express หรือ Fastify ผู้สร้างระบุอย่างชัดเจนว่าไม่ได้มีไว้เพื่อทดแทน Electron ซึ่งออกแบบมาสำหรับแอปพลิเคชันเดสก์ท็อปที่มีอินเตอร์เฟซกราฟิก

ปัจจุบัน Astra รองรับเฉพาะแอปพลิเคชัน Windows แม้ว่านักพัฒนาจะกล่าวว่ากำลังพัฒนาการรองรับ macOS และ Linux อยู่ ข้อจำกัดนี้ รวมถึงเอกสารที่ค่อนข้างน้อยตามที่ผู้แสดงความคิดเห็นบางคนสังเกต บ่งชี้ว่าโปรเจกต์นี้ยังคงอยู่ในช่วงพัฒนา

การตอบสนองของชุมชน JavaScript ต่อ Astra ชี้ให้เห็นถึงความท้าทายที่ดำเนินอยู่ในระบบนิเวศ: การสร้างสมดุลระหว่างฟีเจอร์ทันสมัยกับการใช้ทรัพยากรที่สมเหตุสมผล การเลือกคำศัพท์ที่เหมาะสม และการหาจุดสมดุลที่ถูกต้องระหว่างความสะดวกและความแม่นยำทางเทคนิค เมื่อ Node.js SEA พัฒนาต่อไปจากสถานะทดลอง เครื่องมือเช่น Astra อาจช่วยสร้างมาตรฐานใหม่สำหรับการเผยแพร่แอปพลิเคชัน JavaScript

อ้างอิง: Astra