3 คะแนน โดย GN⁺ 2023-09-09 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • Bun 1.0 จัดการการรัน บิลด์ ทดสอบ และดีบัก JavaScript กับ TypeScript ได้ในเครื่องมือเดียว และอยู่ในสถานะเสถียรพร้อมใช้งานจริง
  • มีเป้าหมายเป็น ทางเลือกแทน Node.js โดยรองรับ Node API และการ resolve โมดูล เช่น fs, path, net, __dirname, process, การ resolve node_modules และแอปพลิเคชันที่ใช้ Express, Koa, Hono รวมถึง Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart, Vite สามารถทำงานบน Bun ได้
  • มี native build สำหรับ Windows เป็นครั้งแรก แต่ยัง อยู่ในขั้นทดลองอย่างมาก และปัจจุบันรองรับเฉพาะ JavaScript runtime ส่วน package manager, test runner และ bundler ถูกปิดใช้งาน
  • การเปลี่ยนแปลงหลัง Bun 0.8 เพิ่มการรองรับ Next.js, Astro, Nest.js และคำสั่ง bun dev ที่เคยถูกเลิกสนับสนุนถูกลบออกแล้ว ตอนนี้จะรันสคริปต์ "dev" ใน package.json แทน
  • Node.js API ที่รองรับใหม่ ได้แก่ child_process.fork() และ IPC, fs.cp(), fs.cpSync(), fs.watchFile(), fs.unwatchFile() และ Unix socket ของ node:http
  • มี JavaScript transpiler ในตัว runtime จึงรันไฟล์ .js, .ts, .cjs, .mjs, .jsx, .tsx ได้โดยไม่ต้องมี dependency เพิ่มเติม
  • รองรับ ESM และ CommonJS พร้อมกัน ทำให้ใช้ import และ require() ในไฟล์เดียวกันได้โดยไม่ต้องพึ่งนามสกุลไฟล์หรือการตั้งค่า "type": "module" ใน package.json
  • มี Web standard API ในตัว เช่น fetch, Request, Response, WebSocket, ReadableStream จึงใช้งานได้โดยไม่ต้องมีแพ็กเกจอย่าง node-fetch และ ws
  • ใช้ hot reloading ได้ด้วยตัวเลือก --hot และ Bun.serve() ก็อยู่ในขอบเขตของ hot reloading ด้วย
  • Bun API มี Bun.file(), Bun.write(), Bun.serve(), bun:sqlite, Bun.password สำหรับจัดการ file I/O, เซิร์ฟเวอร์ HTTP/WebSocket, SQLite รวมถึงการ hash และตรวจสอบรหัสผ่านด้วย bcrypt·argon2
  • package manager มี bun install, bun add, bun remove, bun update และเป็นแบบเข้ากันได้กับ npm โดยอ่าน package.json และเขียนลงใน node_modules
  • test runner bun:test มี API ที่เข้ากันได้กับ Jest และจะ remap การ import @jest/globals กับ vitest เป็น bun:test ภายใน
  • bundler รองรับการ bundling และ minify JavaScript กับ TypeScript พร้อม API ปลั๊กอินที่เข้ากันได้กับ esbuild และมี JavaScript macros ที่รันฟังก์ชัน JavaScript ตอน bundle เพื่อ inline ค่า

1 ความคิดเห็น

 
GN⁺ 2023-09-09
ความคิดเห็นบน Hacker News
  • ผมมีส่วนร่วมในการพัฒนา Bun อยู่ ถ้ามีคำถามก็ยินดีตอบ
    อยากให้ผู้ดูแลเปลี่ยนลิงก์เป็นบทความบล็อก เพราะอธิบายได้ดีกว่าหน้า GitHub release
    บทความบล็อก: https://bun.sh/blog/bun-v1.0

  • สิ่งที่น่าประทับใจที่สุดคือใช้ import กับ require() ในไฟล์เดียวกันได้ และไม่ต้องสนใจ .js/.cjs/.mjs หรือ "type": "module"
    ถ้าไม่ใช่เรื่องนี้ ระบบนิเวศ Node.js ก็แทบจะอยู่ในสภาพพังอย่างสมบูรณ์ และดูเหมือนว่า Bun อาจช่วยกู้มันได้ สิ่งที่ยอดเยี่ยมที่สุดของ Bun ในความเห็นผมไม่ใช่ประสิทธิภาพ แต่เป็น การตัดสินใจที่ใช้งานได้จริงและเป็นมิตรกับนักพัฒนา ซึ่ง Jarred ทำมาอย่างต่อเนื่อง

    • ปัญหานี้มีมานานแล้ว และผมค่อนข้างสงสัยว่า Bun “แก้ได้” มากกว่าเครื่องมืออื่นจริงไหม
      มันแค่เลือกชุดการประนีประนอมอีกแบบหนึ่ง และผลลัพธ์ก็น่าจะทำให้แพ็กเกจอีกชุดหนึ่งใช้งานไม่ได้ ผมอยากรู้ว่ามีหลักฐานอะไรที่บอกได้ว่า Bun ไขความลับที่เครื่องมืออื่นแก้ไม่ได้แล้ว
    • ตอนที่ Node เสนอให้แยกไวยากรณ์ ผมเคยผลักดันให้รองรับแนวทางแบบนี้ และดีใจมากที่ Bun นำไปใช้
      สำหรับผม นี่คือ วิธีที่ถูกต้อง ระบบนิเวศที่แตกแยกของ Node สร้างความเสียหายอย่างมากต่อทั้งภาษาและ runtime
    • ทุก ๆ ไม่กี่ปีจะมีงานที่ต้องใช้ JavaScript เยอะ ๆ และครั้งล่าสุดที่กลับไปเจาะลึก ผมเสียเวลาไปหลายชั่วโมงกับ import เทียบกับ require
      ถ้าไม่ได้ใช้แอป React หรือโซลูชันสำเร็จรูป ระบบนิเวศ JS สมัยใหม่ก็เจ็บปวดจริง ๆ โดยเฉพาะในฐานะคนทำไลบรารีเล็ก ๆ นึกไม่ออกเลยว่าคนเริ่มต้นใหม่จะรู้สึกยากและแทบคลั่งแค่ไหน
      แค่ข้อเท็จจริงที่ว่า Bun แก้ปัญหานั้นได้ก็เป็นเหตุผลเพียงพอให้ลองใช้แล้ว ผมไม่คิดว่าจะรู้สึกคาดหวังกับ JS runtime หรือ build tool อีกตัวแบบนี้ และหวังว่าทีม Bun จะช่วยให้แต่ละวันของผมยังมีสติขึ้นอีกหน่อย
    • โดยพื้นฐานแล้วผมสร้างโปรเจกต์แบบโมดูลมาตั้งแต่เกือบ 1 ปีก่อน หลังจาก TypeScript 5.0 มี กลยุทธ์การ resolve แบบ bundler ช่วง 6 เดือนที่ผ่านมาก็ถือว่าโอเคโดยรวม
      มีปัญหาน้อยมาก แต่จนกว่าโปรเจกต์ต่าง ๆ จะแก้ ผมก็เลี่ยงด้วย pnpm patch และการแก้เมตาดาต้า ปี 2023 เรียกได้ว่าเป็นปีของโมดูล และสถานการณ์ก็ใช้ได้
    • เห็นด้วย ตอนนี้น่าจะต้องเป็นผู้เชี่ยวชาญ JavaScript แล้ว แต่ไม่มีอะไรทำให้รู้สึกโง่ได้เท่ากับตอนต้องฝ่าดง type: module และ .js/.cjs/.mjs/.ts
      ในแอป production แน่นอนว่าต้องชัดเจนว่าใช้อะไร แต่ในการทำ prototype พฤติกรรมที่ผ่อนปรน ของ Bun ทำให้เขียนโค้ดก่อน แล้วค่อยไปกังวลเรื่องที่เหลือทีหลังได้
  • สำหรับ release 1.0 ที่ตัดสินใจยังไม่ implement node: ทั้งหมด ผมคิดว่าน่าจะมีถ้อยคำที่ดีกว่า drop-in replacement ได้ไหม
    ผมผิดหวังค่อนข้างมากตรงที่สองโปรเจกต์แรกที่ลองไม่ใช่การแทนที่แบบ drop-in และตอนนี้ก็เริ่มสงสัยการสื่อสารทั้งหมดของ Bun
    บริบทคือทั้งสองโปรเจกต์ใช้ osc ที่ต้องการ dgram ผมเจอตั๋วติดตามคำขอฟีเจอร์เมื่อ 9 เดือนก่อน แต่ไม่มีแผน implement และค้นหา dgram ในหน้าประกาศครั้งนี้ก็ไม่เจออะไรเลย
    ข้อเสนอเร็ว ๆ คืออยากให้ระบุโมดูลที่ Bun 1.0 ยังไม่รองรับ และใส่ไว้ในส่วนความเข้ากันได้กับ Node.js
    แก้ไข: เจอเอกสารการรองรับ Node แล้ว — https://bun.sh/docs/runtime/nodejs-apis น่าจะลิงก์ไว้ใน release note ด้วย
    ดูคร่าว ๆ เหมือนมีโมดูลที่ implement แล้ว 17 ตัว, implement บางส่วน 17 ตัว, ยังไม่ implement 7 ตัว

    • เวอร์ชันจริงดูใกล้กับ 1.0.0-beta มากกว่า 1.0.0
      ผมเพิ่งติดตั้ง v1.0.0 แล้วรัน bun repl แต่ล้มเหลวด้วย exit code 1 และกลายเป็นว่า REPL พยายามใช้พอร์ต 3000 ซึ่งในสภาพแวดล้อมของผมถูกใช้อยู่แล้ว จากบั๊กที่รายงานใน GitHub ดูเหมือนจะมีปัญหาเล็ก ๆ แบบนี้อยู่พอสมควร ดังนั้นคงต้องระแวงคำกล่าวอ้างทั้งหมดในระดับหนึ่ง
      ถึงอย่างนั้น ผมก็ประทับใจอย่างมากกับความเร็วและผลลัพธ์ ไม่คิดว่าโปรเจกต์นี้จะมาถึงจุดนี้ได้เร็วขนาดนี้ และคิดว่าจะใช้เวลานานกว่านี้มาก เมื่อเทียบกันแล้ว Deno เริ่มก่อนตั้งนานแต่ตอนนี้รู้สึกตามหลังอยู่มาก ผมเลยคิดว่าจะลองใช้ Bun กับโปรเจกต์ส่วนตัว
    • สิ่งสำคัญไม่ใช่จำนวนกี่ตัว แต่คือ โมดูลไหน ต่างหาก
      จากประสบการณ์เฉพาะตัว เรากำลังทดลอง Bun กับแอปพลิเคชันขนาดใหญ่ที่มีลูกค้าปัจจุบันหลายล้านคน และปัญหาเดียวจนถึงตอนนี้ไม่ใช่ตัว Bun เอง แต่เป็น patch-package ที่ยังไม่รองรับไฟล์ lock bun.lockb
      Bun เร็วกว่า Yarn อย่างไม่มีข้อกังขา พูดในฐานะคนที่ชอบ Yarn มากจริง ๆ
    • ในส่วนความเข้ากันได้กับ Node.js เขียนไว้แล้วแบบนี้
      “Note — For a detailed breakdown of Node.js compatibility, check out: bun.sh/nodejs.”
      ในรายการละเอียดมีระบุโมดูลที่ไม่รองรับไว้
    • เห็นด้วยกับความเห็นนี้ ผมคาดหวังมากและพยายามจะลองใช้ แต่รันโปรเจกต์ส่วนใหญ่ของเราไม่ได้
      ใช้ AWS SDK v3 ไม่ได้เพราะเกิดข้อผิดพลาดระหว่าง parse response, node:crypto ยัง implement ไม่ครบจึงใช้สิ่งที่พึ่งพา octokit หรือ jsonwebtoken ไม่ได้, ไม่มี jest.resetAllMocks() เลยรัน test ไม่ได้ และในอีกโปรเจกต์หนึ่ง bun test บอกว่าเรียก shared library ผิดแล้วไม่ยอมรันเลย
      ดังนั้น workflow ในเครื่องคือ “ลองรันด้วย Bun ถ้าล้มเหลวก็รันใหม่ด้วย Node” อย่างน้อยก็คงใช้แทน npm ได้ แต่ยังจินตนาการไม่ออกว่าจะใช้รัน service จริง ๆ ตอนมันทำงานได้ก็น่าทึ่งมากจริง ๆ เลยตั้งตารออนาคต แต่ถ้าจุดขายคือความเข้ากันได้กับ Node ผมคิดว่ายังเรียกว่า 1.0 ได้ยาก
  • สงสัยว่าเคยคิดจะย้ายแชตชุมชนไปยังแพลตฟอร์มอื่นที่ไม่ใช่ Discord หรือไม่
    Discord ถูกพูดถึงบน HN หลายครั้งเพราะปัญหาเรื่องการเข้าถึง ความเป็นส่วนตัว และการผูกติดกับแพลตฟอร์มปิด และดูเหมือนจะไม่ค่อยสอดคล้องกับจิตวิญญาณโอเพนซอร์สด้วย [1] ก็น่าอ่านประกอบ
    [1] https://drewdevault.com/2021/12/28/Dont-use-Discord-for-FOSS...

    • ต่อให้การไม่ใช้ Discord จะสำคัญ แต่ก็ดูไม่น่าจะเปลี่ยน
      ในคอมเมนต์ประกาศ Bun 0.6 คำถามคล้ายกันก็ถูก downvote จนเกือบโดน flag: https://news.ycombinator.com/item?id=35970869
      ในคอมเมนต์ประกาศ Bun 0.8 คำถามเดียวกันก็แทบไม่ได้รับความสนใจ และปฏิกิริยาประมาณว่า “โปรเจกต์อื่น ๆ ก็ใช้กันทั้งนั้น…”: https://news.ycombinator.com/item?id=37244294
    • การเข้าถึงของ Discord ดีขึ้นค่อนข้างมากแล้ว ผู้ใช้ screen reader ที่อยู่ในส่วนแหล่งอ้างอิงของบทความนั้นเองก็เห็นด้วยว่าช่วงหลังการเข้าถึงของ Discord ดีขึ้น และมีผู้พิการทางสายตาใช้มากขึ้น
      พูดตรง ๆ Discord เป็นที่ที่ดีสำหรับโปรเจกต์ซอฟต์แวร์เสรีและโอเพนซอร์สในการวางการสื่อสารของชุมชน ข้ออ้างในบทความที่ว่า “การเลือก Discord เป็นการทำให้แพลตฟอร์มนั้นชอบธรรมและดึงคุณค่าออกจากแพลตฟอร์ม FOSS” ดูค่อนข้างไม่หนักแน่น Discord เป็นแพลตฟอร์มที่ชอบธรรมจริง ๆ ใช้ฟรี มีฟีเจอร์น่าสนใจมากมาย และการเข้าถึงก็ดี ที่สำคัญ การเลือก Discord ไม่ได้ทำให้คุณค่าของแพลตฟอร์มสื่อสาร FOSS หายไป
      คำพูดว่า “ใช้ IRC สิ” ก็ไม่ถูกต้อง IRC เข้าถึงได้ยากมากสำหรับคนจำนวนมากที่ไม่คุ้นเคยกับคอมพิวเตอร์และซอฟต์แวร์
    • มี ทางเลือก FOSS แทน Discord ที่ไม่เสียเงินไหม?
    • answeroverflow.com พอจะเป็นทางแก้ชั่วคราวได้ไหม?
  • Bun ได้เงินทุนจาก VC เลยสงสัยเรื่อง แผนทำเงิน
    เวลาเห็นเทคโนโลยีใหม่ ๆ จะพิจารณาว่า “อีก N ปีข้างหน้า เทคโนโลยีนี้ยังมีโอกาสถูกพัฒนาอย่างคึกคักอยู่แค่ไหน” Bun ต้องหาเงินให้ได้ไม่ทางใดก็ทางหนึ่ง ไม่อย่างนั้นเงินทุนก็จะขาด
    การที่ไลเซนส์ของ Bun เป็น MIT นั้นยอดเยี่ยม และทำให้มีความหวังว่าแม้บริษัทจะล้ม โปรเจกต์ก็อาจไม่ตาย อยากให้บริษัทประสบความสำเร็จ แต่ถ้าจะนำ Bun มาใช้ ก็อยากรู้ว่าภายหลังจะมีการ upsell แบบไหน

    • แผนธุรกิจอธิบายไว้ที่ https://oven.sh/
      Oven จะให้บริการ serverless hosting ที่เร็วมากและ continuous integration สำหรับแอป JavaScript ทั้งแบ็กเอนด์และฟรอนต์เอนด์ และจะขับเคลื่อนด้วย Bun
      มีแผนรองรับเฟรมเวิร์กฟรอนต์เอนด์อย่าง Next.js, Vite, SvelteKit, SolidStart และเฟรมเวิร์กแบ็กเอนด์อย่าง Express, Fastify, NestJS
      แผนคือจะรันเซิร์ฟเวอร์ของตัวเองที่ edge ของศูนย์ข้อมูลทั่วโลก และ Oven ตั้งใจจะผสาน JavaScript stack ทั้งหมดแบบ end-to-end ไปจนถึงฮาร์ดแวร์ เพื่อสร้างความเป็นไปได้ใหม่ ๆ
    • เพราะเป็น bundler เลยคิดว่าน่าจะหาเงินจากการโฮสต์แอป JS ในรูปแบบอย่าง bun deploy
      เป็นกลยุทธ์ที่พบบ่อย คือดึงการยอมรับจากนักพัฒนาในวงกว้างก่อน แล้วค่อยพาไปสู่การโฮสต์แอปพลิเคชันของตัวเองอย่างนุ่มนวล
    • เมื่อก่อนมี dev server สำหรับ HMR ที่เจ๋งมากชื่อ Pundle เร็วจนตอบสนองได้ทันที แต่ก็เป็นโปรเจกต์ที่ดูแลโดยคนคนเดียวในประเทศยากจน
      พยายามตาม side project ของคนคนเดียวแล้วลำบากมาก เลยย้ายทุกอย่างไป Rollup และไม่หันกลับไปอีก
      ความกังวลของโปรเจกต์ที่ได้ทุน VC กับ side project แบบสุ่มย่อมต่างกันแน่ แต่ความเสี่ยงสุดท้ายของทั้งคู่คือ “ถ้าคนที่สร้างมันสนับสนุนเราไม่ได้แล้วจะทำอย่างไร”
    • คิดว่าน่าจะไปแนว NextJS/Vercel หรือ Deno/Deploy และก็มองว่า การเปลี่ยนไลเซนส์ ก็ใช่ว่าจะเป็นไปไม่ได้
      เป็นวิธีโปรโมตทุกอย่างว่าเป็น “โอเพนซอร์ส” เพื่อให้ได้ bug report ฟรี การมีส่วนร่วม การตลาด และการยอมรับ แล้วค่อยดันเข้าไปสู่ผลิตภัณฑ์เชิงพาณิชย์
  • ข้อเสนอที่ว่า Bun อาจแทนที่ความสับสนที่ซ้อนกันเป็นชั้น ๆ ของเครื่องมือบน Node นั้นน่าสนใจมาก
    เพราะจะช่วยลด node, ts-node, nodemon, tsc, jest, ts-jest, webpack, Babel, สเปกโมดูล 2 แบบที่เข้ากันไม่ได้, ความวุ่นวายของ UMD, package manager 3 ตัว และไฟล์ตั้งค่าที่เพิ่มขึ้นแบบระเบิดจากสิ่งเหล่านี้
    ระบบเครื่องมือรอบ ๆ JavaScript เป็นความเจ็บปวดที่ใหญ่ที่สุดอย่างชัดเจน และทำให้ ES6 + TypeScript ซึ่งเดิมเป็นภาษาที่ค่อนข้างทรงความสามารถและใช้งานสบาย กลายเป็นงานจุกจิกเต็มตัว หวังว่า Bun จะทำได้
    น่าจะให้ความรู้สึกคล้ายตอนย้ายจาก CMake ไป Cargo

  • บล็อกโพสต์นี้แสดง value proposition ของ ซอฟต์แวร์ all-in-one ที่เรียบง่ายกว่าได้อย่างโน้มน้าวมาก
    ช่วงนี้รู้สึกดึงดูดกับซอฟต์แวร์แบบ “batteries included” มากกว่า “ไปเอาทุกอย่างมาเอง” เลยตั้งตารอจะลองใช้ Bun
    รู้สึกเหมือนเป็นเวอร์ชัน runtime ของเครื่องมือ Rome ที่พยายามแทนที่ซอฟต์แวร์หลายตัวด้วยตัวเดียวที่เร็วกว่า Rome ล้มเหลวและถูก เปลี่ยนเป็น OSS โดยทีมใหม่ แล้ว หวังว่า Bun จะประสบความสำเร็จกว่า แต่ก็เป็นปัญหาที่แก้ยากอย่างชัดเจน

    • เห็นด้วยกับแนวทาง “batteries included” ถ้าระบบนิเวศฝั่ง Node.js กลมกลืนกันตั้งแต่แรก ก็คงไม่ต้องมีแนวทางแบบนี้
      เหมือน Apple ถ้าเป็นเจ้าของและควบคุมฮาร์ดแวร์กับระบบปฏิบัติการเอง ก็สามารถปรับแต่งระบบได้ลึก และยังทำให้มั่นใจได้ว่าอุปกรณ์ทั้งหมดทำงานร่วมกันอย่างลื่นไหล ชุดเครื่องมือ all-in-one ช่วยลดภาระในการวิ่งหาโซลูชันที่สมบูรณ์แบบ และทำให้ใช้โซลูชันที่อยู่ตรงหน้าอยู่แล้ว
  • อยากฟังจากคนที่เคยใช้ทั้ง Bun และ Deno ว่าในทางปฏิบัติแล้ว ฝั่งไหนเป็น ผู้สืบทอด Node ที่น่าเชื่อถือกว่ากัน
    เว็บไซต์ของ Bun อ้างว่าประสิทธิภาพดีกว่า Deno มาก เลยสงสัยว่าเป็นแบบนั้นจริงไหม และถ้าใช่ก็อยากรู้ว่าทำไม Deno ก็ดูเหมือนมีเป้าหมายคล้ายกัน
    ยังสงสัยด้วยว่าระหว่างสองโปรเจกต์นี้มีความแตกต่างเชิงปรัชญามากไหม เช่น Bun พยายามนำทุกอย่างมา implement ใหม่ ส่วน Deno ต้องการแนวทางใหม่หลังยุค Node อะไรทำนองนั้นหรือเปล่า มีใครเคยใช้ทั้งคู่มากพอไหม?

    • ทั้งสองตัวไม่ได้ดึงดูดใจมากนัก แต่ก่อนอื่นก็สงสัยว่าทำไมถึงต้องมีผู้สืบทอด Node ด้วย
      ทั้ง Bun และ Deno เป็นเครื่องมือที่มีฐานจากเงินลงทุน VC เลยมีข้อสงสัยพื้นฐานเรื่องการทำรายได้และความยั่งยืน
      จุดขายหลักของ Bun ดูเหมือนจะเป็นประสิทธิภาพ แต่แทบไม่เคยเจอปัญหาประสิทธิภาพใหญ่ ๆ กับ Node เลย มันไม่ได้เร็วสุด ๆ ก็จริง แต่มีโอกาสชนข้อจำกัดด้าน I/O มากกว่าความเร็วของ Node มาก
      จุดขายหลักของ Deno คือ “Node ที่ทำมาอย่างถูกต้อง” ในหลายด้าน เช่น packaging ที่ดีกว่า การใช้ ES6 อย่างเต็มรูปแบบ และข้ออ้างนั้นก็น่าสนใจ แต่ดูเหมือนว่าจะเลิกพยายามสร้าง ecosystem ใหม่ แล้วหันไปเพิ่มความเข้ากันได้กับ Node แทน
      ขณะเดียวกัน การปรับปรุงล่าสุดของ Node เอง เช่น test runner ในตัวและการรองรับ .env ในตัว ก็น่าชื่นใจ ดังนั้นจึงหาเหตุผลหนักแน่นที่จะใช้ Bun หรือ Deno ได้ยาก และต่อให้เปลี่ยนไปใช้ ก็ยังต้องมีเส้นทางที่ชัดเจนในการกลับมาใช้ Node หากเครื่องมือรุ่นใหม่เหล่านี้ไม่ยั่งยืน
    • เครื่องมือเหล่านี้ยังใหม่เกินกว่าจะบอกได้ว่ามีใครใช้มานานจริง ๆ
      Bun พยายามรวมทุกอย่างไว้ด้วยกันและทำให้เร็วมาก พร้อมกับรักษาความเข้ากันได้กับ Node ให้มากที่สุดเท่าที่ทำได้ ไม่ได้ทิ้ง ecosystem เดิม
      Deno เคยมีมุมมองที่ค่อนข้างเผชิญหน้ากับ ecosystem ของ Node และตอนนี้กำลังเพิ่มการรองรับกลับเข้ามา
      ถ้ามองในฐานะผู้สืบทอด ผมคิดว่า Bun เป็นตัวเลือกเดียว เพราะพยายามสร้างนวัตกรรมด้วยฟีเจอร์ใหม่ ๆ ขณะยังรักษาความเข้ากันได้กับ Node
    • ไม่ใช่ผู้ใช้ระดับเชี่ยวชาญ และส่วนใหญ่เคยลองเล่น Deno
      Deno ดูใกล้เคียงกับ runtime ทางเลือกของ Node ที่ยึดหลักความปลอดภัยเป็นอันดับแรกมากกว่า และยังมีการรองรับ TypeScript กับ JSX ในตัว รวมถึงเครื่องมืออย่าง linter ด้วย อีกทั้งยังอิง V8 ด้วย ดูเหมือนเป็นรูปแบบที่ Ryan Dahl มองย้อนหลังว่า Node ควรจะเป็นแบบนี้
      Bun ในเชิงเทคนิคอิง WebKit ซึ่งไม่แน่ใจว่าทำไม และดูเหมือนไม่ใช่แค่ runtime แต่เป็น เครื่องมือแบบ all-in-one ที่ดีกว่า ยังให้ความเข้ากันได้พื้นฐานกับ framework เดิม ๆ ด้วย Deno จนไม่นานมานี้ยังไม่เข้ากันกับ npm และก็สงสัยเหมือนกันว่านั่นเป็นเจตนาตั้งแต่แรก หรือเป็นการเปลี่ยนทิศทางระหว่างทาง
    • เราเป็นทีม full-stack TypeScript และดูแลไลบรารีภายในประมาณ 50 ตัวกับโค้ด TypeScript ประมาณ 500,000 บรรทัด
      เดือนที่แล้วเราได้ทดสอบทั้ง Deno และ Bun ในฐานะ runtime ทางเลือก สรุปคือ สำหรับ codebase ที่ซับซ้อนพอสมควร Bun แทบจะทำงานได้เสมอ ส่วน Deno แทบจะใช้ไม่ได้เสมอ
      ตอนนี้เรารัน test ทั้งบน Node.js และ Bun และเลิกพยายามนำ Deno มาใช้แล้ว
    • ถ้าจำไม่ผิด Bun ไม่รองรับ Windows ต่างจาก Node/Deno
      แก้ไข: ดูเหมือนว่ากำลังเปลี่ยนไป ขอบคุณที่แก้ข้อมูลให้
  • เดิมทีตั้งใจจะปล่อยเมื่อวาน แต่มี test เรื่องการ stream body ของ fetch() ที่ล้มเหลวและต้องแก้
    บทความบล็อกไม่ควรถูกเผยแพร่ก่อนที่ Bun 1.0 จะขึ้น GitHub แต่ลิงก์เปิดให้เข้าถึงได้สาธารณะ และมีบั๊กที่ทำให้ซ่อน draft ใน RSS feed ไม่ได้
    บั๊กจริง ๆ ไม่ได้อยู่ที่การ stream body ของ fetch() แต่อยู่ใน binding ของ JavaScriptCore ที่ดึง property จาก object ซึ่งอาจไม่ได้กำหนด property นั้นไว้ โค้ดบางส่วนตรวจแค่ว่าค่าเป็น JSCell หรือไม่ โดยไม่ได้ตรวจว่าเป็น object หรือเปล่า แม้โดยทั่วไป JSCell จะเป็น object แต่สิ่งอย่าง symbol หรือ BigInt ไม่ใช่ JSObject
    เธรดเมื่อวาน: https://news.ycombinator.com/item?id=37424724

    • ในส่วนการติดตั้งของเอกสาร Linux ยังขาด DEB/RPM อยู่ ถ้าอัปเดตให้ได้ก็ดี
      เป็นคำแนะนำเพิ่มเติม สามารถให้ตัวอย่าง Ansible playbook/task set สำหรับการติดตั้งแบบ “ดาวน์โหลดจากอินเทอร์เน็ต ไม่ใช่จาก repository ของ distribution” พร้อม checksum ที่เหมาะสมอย่าง SHA-256 ได้ Puppet ก็เช่นกัน แต่อาจซับซ้อนกว่าเล็กน้อย
      จะช่วยลดงานของผู้ดูแลระบบลงได้บ้าง และถ้าอยากตั้งชื่อก็อาจเรียกว่า SAX หรือประสบการณ์ของผู้ดูแลระบบ
  • ถ้า Bun สามารถรันและบันเดิลแอป TypeScript React ได้โดยค่าเริ่มต้น ก็สงสัยว่าข้อดีของการใช้ Vite.js บน Bun คืออะไร
    คู่มือบนเว็บไซต์ทางการแสดงวิธีใช้ Bun + Vite.js ตอนสร้างแอป TypeScript React เลยทำให้สับสน [1]
    บน GitHub ก็มี issue ที่เกี่ยวข้องเช่นกัน [2]
    หรือ Vite.js จะรับหน้าที่ในสถานการณ์ที่ซับซ้อนกว่าหรือ use case ขั้นสูงที่ Bun จัดการไม่ได้? การใช้ Vite.js ของผมก็แค่เริ่มจากการตั้งค่า TS+React พื้นฐานแล้ว build เท่านั้น เลยอาจมีอะไรที่ผมมองข้ามไปก็ได้
    [1] https://bun.sh/guides/ecosystem/vite
    [2] https://github.com/oven-sh/bun/issues/250

    • Vite ยังคงใช้ Node, esbuild, swc, tsc ฯลฯ ในส่วนที่ตัวมันเองไม่ได้รับผิดชอบโดยตรง
      ยังไม่เคยลองใช้ Bun เอง แต่เข้าใจว่าสำหรับการรันเซิร์ฟเวอร์พัฒนาในเครื่องจะใช้ Bun แทน Node ได้, สำหรับการบันเดิลจะใช้ Bun แทน esbuild หรือ tsc, Rollup หรือการผสมกันของเครื่องมือเหล่านั้นได้, และสำหรับการแปลงโค้ดจะใช้ Bun แทน Babel กับ TypeScript ได้
      สิ่งที่ Vite มอบให้คือการจัดองค์ประกอบที่ช่วยตั้งค่าการพัฒนาแอปพลิเคชันฝั่งฟรอนต์เอนด์ให้ง่าย และให้ ประสบการณ์นักพัฒนา ที่ดีเวลาทำงานในเครื่อง
    • เคยเห็นการใช้ Vite ร่วมกับ Bun ก็เพื่อ HMR เท่านั้น
      ตอนนี้ยังมีความซับซ้อนด้านการตั้งค่าอยู่ จึงมองว่าการผสานสองตัวนี้เข้าด้วยกันยังไม่ได้ดีมาก
    • การขอให้ผู้คนรับเอาทั้ง ecosystem มาใช้ในคราวเดียวเป็นภาระที่หนักมาก
      ความเข้ากันได้กับ ecosystem เดิมเป็นเป้าหมายหลักของ Bun ดังนั้นจึงตั้งใจให้ผู้คนเริ่มใช้กับ codebase เดิมได้ทันที แล้วค่อย ๆ นำไปใช้ในส่วนอื่นมากขึ้น
    • น่าจะใช้ประโยชน์จาก ecosystem ของปลั๊กอิน ของ Vite ได้ เช่น PostCSS, Tailwind, Terser
      และเนื่องจาก meta framework ใหม่ ๆ ส่วนใหญ่ เช่น Nuxt, SvelteKit, Astro, SolidStart, Qwik ทำงานอยู่บน Vite จึงสามารถเปิดเส้นทางให้รับ Bun ไปใช้ได้
    • นี่คล้ายกับการถามว่ามี tsc อยู่แล้วทำไมยังต้องใช้ Vite
      ผมมองว่า Bun ไม่ได้ถึงขั้น “รันแอป TypeScript React” มากนัก แต่เป็นการมีการแปลง JSX/TSX มาให้โดยค่าเริ่มต้นมากกว่า