ผลกระทบในทศวรรษ: แพ็กเกจ npm ของเรามียอดดาวน์โหลดถึง 1 พันล้านครั้งและสร้างรูปลักษณ์ของ JavaScript ได้อย่างไร

ใน จาวาสคริปต์ และ โหนด js แพ็คเกจบางแพ็คเกจมีความจำเป็นอย่างยิ่งในโลก มีการดาวน์โหลดนับล้านครั้งต่อวันและขับเคลื่อนแอปทั่วโลก เบื้องหลังเครื่องมือเหล่านี้คือผู้พัฒนาที่มุ่งเน้นคุณภาพโอเพ่นซอร์ส วันนี้ เราจะแสดงวิธีที่ทีมงานของเราช่วยสร้างและดูแลแพ็คเกจ npm ซึ่งกลายมาเป็นส่วนสำคัญของระบบนิเวศ JavaScript

ผู้บุกเบิกที่ไว้วางใจเรา: ไอแซก ซี. ชลูเอเตอร์ และอีเมลส่งต่อ

เรามีความภูมิใจที่ได้มี ไอแซ็ก ซี. ชลูเอเตอร์ (GitHub: ไอแซ็กส์) ในฐานะผู้ใช้ ไอแซคสร้าง เหนือระดับน้ำทะเล และช่วยสร้าง โหนด jsความไว้วางใจที่เขามีต่อ Forward Email แสดงให้เห็นถึงการที่เราให้ความสำคัญกับคุณภาพและความปลอดภัย Isaac ใช้ Forward Email สำหรับโดเมนต่างๆ มากมาย รวมถึง izs.me

อิทธิพลของไอแซคต่อ JavaScript นั้นมหาศาล ในปี 2009 เขาเป็นหนึ่งในคนกลุ่มแรกที่มองเห็นศักยภาพของ Node.js โดยทำงานร่วมกับ ไรอัน ดาห์ลผู้สร้างแพลตฟอร์มนี้ขึ้นมา ดังที่ไอแซคกล่าวไว้ใน บทสัมภาษณ์กับนิตยสาร Increment:"ท่ามกลางชุมชนเล็กๆ แห่งนี้ที่มีผู้คนจำนวนหนึ่งพยายามค้นหาวิธีสร้าง JS ฝั่งเซิร์ฟเวอร์ให้เกิดขึ้น Ryan Dahl ได้เสนอ Node ขึ้นมา ซึ่งชัดเจนว่าเป็นแนวทางที่ถูกต้องมาก ฉันทุ่มทุนและมีส่วนร่วมอย่างมากในช่วงกลางปี 2009"

[!หมายเหตุ] สำหรับผู้ที่สนใจประวัติของ Node.js มีสารคดีดีๆ มากมายที่บันทึกเรื่องราวการพัฒนาของ Node.js เช่น เรื่องราวของ Node.js และ 10 สิ่งที่ฉันเสียใจเกี่ยวกับ Node.js – Ryan Dahlของไรอัน ดาห์ล เว็บไซต์ส่วนตัว ยังมีข้อมูลเชิงลึกอันล้ำค่าเกี่ยวกับผลงานของเขาด้วย

จากการสร้าง npm สู่การเป็นผู้นำ Node.js

ไอแซ็กสร้าง npm ในเดือนกันยายน 2009 โดยมีเวอร์ชันที่ใช้งานได้เวอร์ชันแรกเปิดตัวในช่วงต้นปี 2010 ตัวจัดการแพ็คเกจนี้ตอบสนองความต้องการที่สำคัญใน Node.js โดยให้ผู้พัฒนาสามารถแบ่งปันและนำโค้ดกลับมาใช้ใหม่ได้อย่างง่ายดาย ตามรายงาน หน้า Wikipedia ของ Node.jsในเดือนมกราคม 2010 มีการนำตัวจัดการแพ็คเกจมาใช้กับสภาพแวดล้อม Node.js ที่เรียกว่า npm ตัวจัดการแพ็คเกจช่วยให้โปรแกรมเมอร์สามารถเผยแพร่และแชร์แพ็คเกจ Node.js พร้อมกับโค้ดต้นฉบับ และได้รับการออกแบบมาเพื่อลดความยุ่งยากในการติดตั้ง อัปเดต และถอนการติดตั้งแพ็คเกจ

เมื่อ Ryan Dahl ก้าวลงจาก Node.js ในเดือนมกราคม 2012 Isaac ก็เข้ามาดำรงตำแหน่งหัวหน้าโครงการแทน ตามที่ระบุไว้ บทสรุปของเขาเขา "เป็นผู้นำการพัฒนา API หลักของ Node.js หลายตัว รวมถึงระบบโมดูล CommonJS, API ของระบบไฟล์ และสตรีม" และ "ทำหน้าที่เป็น BDFL (ผู้เผด็จการที่ใจดีตลอดชีวิต) ของโครงการเป็นเวลา 2 ปี โดยรับประกันคุณภาพที่เพิ่มมากขึ้นอย่างต่อเนื่องและกระบวนการสร้างที่เชื่อถือได้สำหรับ Node.js เวอร์ชัน v0.6 ถึง v0.10"

ไอแซ็กเป็นผู้นำ Node.js ผ่านช่วงการเติบโตที่สำคัญ โดยกำหนดมาตรฐานที่ยังคงกำหนดรูปแบบแพลตฟอร์มในปัจจุบัน ต่อมาเขาได้ก่อตั้ง npm, Inc. ในปี 2014 เพื่อรองรับรีจิสทรี npm ซึ่งเขาเคยดำเนินการด้วยตัวเองมาก่อน

เราขอขอบคุณ Isaac สำหรับการสนับสนุนอันยิ่งใหญ่ของเขาที่มีต่อ JavaScript และยังคงใช้แพ็คเกจจำนวนมากที่เขาสร้างขึ้น งานของเขาได้เปลี่ยนแปลงวิธีที่เราสร้างซอฟต์แวร์และวิธีที่นักพัฒนาหลายล้านคนแบ่งปันโค้ดทั่วโลก

สถาปนิกเบื้องหลังโค้ด: การเดินทางของ Nick Baugh

หัวใจสำคัญของความสำเร็จด้านโอเพ่นซอร์สของเราคือ Nick Baugh ผู้ก่อตั้งและเจ้าของ Forward Email ผลงานด้าน JavaScript ของเขากินเวลานานเกือบ 20 ปี และได้หล่อหลอมให้นักพัฒนาซอฟต์แวร์จำนวนนับไม่ถ้วนสร้างแอปขึ้นมา เส้นทางการทำงานด้านโอเพ่นซอร์สของเขาแสดงให้เห็นถึงทั้งทักษะทางเทคนิคและความเป็นผู้นำในชุมชน

คณะกรรมการเทคนิคและการสนับสนุนหลักของบริษัท Express

ความเชี่ยวชาญด้านกรอบงานเว็บของ Nick ทำให้เขาได้รับตำแหน่งใน คณะกรรมการเทคนิคเอ็กซ์เพรสซึ่งเขาช่วยในเฟรมเวิร์ก Node.js ที่ใช้กันมากที่สุดเฟรมเวิร์กหนึ่ง ปัจจุบัน Nick อยู่ในรายชื่อสมาชิกที่ไม่ได้ใช้งานบน หน้าชุมชนเอ็กซ์เพรส.

[!IMPORTANT] Express ถูกสร้างขึ้นโดย TJ Holowaychuk ผู้สนับสนุนโอเพ่นซอร์สที่มีผลงานมากมายซึ่งได้กำหนดระบบนิเวศของ Node.js ไว้มากมาย เราซาบซึ้งต่อผลงานพื้นฐานของ TJ และเคารพในความทุ่มเทของเขา การตัดสินใจหยุดพัก จากการมีส่วนร่วมในโครงการโอเพนซอร์สอันกว้างขวางของเขา

ในฐานะสมาชิกของ คณะกรรมการเทคนิคเอ็กซ์เพรสนิคแสดงความเอาใจใส่อย่างมากต่อรายละเอียดในประเด็นต่างๆ เช่น การชี้แจง req.originalUrl การจัดทำเอกสารและแก้ไขปัญหาการจัดการแบบฟอร์มหลายส่วน

การมีส่วนสนับสนุนกรอบงาน Koa

งานของนิคกับ กรอบโครงสร้างโคอา—ทางเลือกที่ทันสมัยและเบากว่า Express ซึ่งสร้างสรรค์โดย TJ Holowaychuk เช่นกัน—แสดงให้เห็นถึงความมุ่งมั่นของเขาในการพัฒนาเครื่องมือพัฒนาเว็บที่ดีขึ้น ผลงาน Koa ของเขามีทั้งปัญหาและโค้ดผ่านคำขอแบบ pull request การจัดการข้อผิดพลาด การจัดการประเภทเนื้อหา และการปรับปรุงเอกสาร

ผลงานของเขาทั้งในด้าน Express และ Koa ทำให้เขามีมุมมองที่เป็นเอกลักษณ์เกี่ยวกับการพัฒนาเว็บ Node.js และช่วยให้ทีมของเราสร้างแพ็คเกจที่ทำงานได้ดีกับระบบนิเวศเฟรมเวิร์กหลากหลายประเภท

จากผู้มีส่วนสนับสนุนส่วนบุคคลสู่ผู้นำองค์กร

สิ่งที่เริ่มต้นจากการช่วยเหลือโครงการที่มีอยู่ได้เติบโตเป็นการสร้างและรักษาระบบนิเวศแพ็คเกจทั้งหมด นิคได้ก่อตั้งองค์กร GitHub หลายแห่ง รวมถึง ห้องโดยสาร, เครื่องสแกนสแปม, ส่งต่ออีเมล, ปล่อย, และ บรี—แต่ละอย่างจะตอบสนองความต้องการเฉพาะเจาะจงในชุมชน JavaScript

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

องค์กร GitHub ของเรา: ระบบนิเวศแห่งนวัตกรรม

เราจัดระเบียบงานโอเพ่นซอร์สของเราโดยเน้นไปที่องค์กร GitHub ที่แต่ละองค์กรตอบสนองความต้องการเฉพาะใน JavaScript โครงสร้างนี้สร้างกลุ่มแพ็คเกจที่เชื่อมโยงกันซึ่งทำงานร่วมกันได้ดีในขณะที่ยังคงความเป็นโมดูล

ห้องโดยสาร: การบันทึกข้อมูลแบบมีโครงสร้างสำหรับแอปพลิเคชันสมัยใหม่

ที่ การจัดระบบห้องโดยสาร เป็นแนวคิดของเราเกี่ยวกับการบันทึกแอปที่เรียบง่ายแต่ทรงพลัง cabin แพ็คเกจนี้มีดาว GitHub เกือบ 900 ดวงและยอดดาวน์โหลดรายสัปดาห์มากกว่า 100,000 ครั้ง[^1] Cabin นำเสนอการบันทึกข้อมูลแบบมีโครงสร้างที่ทำงานร่วมกับบริการยอดนิยม เช่น Sentry, LogDNA และ Papertrail

สิ่งที่ทำให้ Cabin พิเศษคือระบบ API และปลั๊กอินที่ใส่ใจ แพ็คเกจที่รองรับ เช่น axe สำหรับมิดเดิลแวร์ Express และ parse-request สำหรับการแยกวิเคราะห์คำขอ HTTP แสดงให้เห็นถึงความมุ่งมั่นของเราในการหาโซลูชันที่สมบูรณ์แทนที่จะใช้เครื่องมือที่แยกออกมา

ที่ bson-objectid แพ็คเกจนี้สมควรได้รับการกล่าวถึงเป็นพิเศษ โดยมียอดดาวน์โหลดมากกว่า 1.7 ล้านครั้งในเวลาเพียงสองเดือน[^2] การใช้งาน MongoDB ObjectID แบบเบาๆ นี้ได้กลายเป็นสิ่งที่นักพัฒนาซอฟต์แวร์ต้องการ ID โดยไม่ต้องพึ่งพา MongoDB เต็มรูปแบบ

เครื่องสแกนสแปม: ต่อสู้กับการละเมิดอีเมล

ที่ องค์กรสแกนสแปม แสดงให้เห็นถึงความมุ่งมั่นของเราในการแก้ไขปัญหาที่แท้จริง spamscanner แพ็คเกจนี้ให้การตรวจจับสแปมอีเมลขั้นสูง แต่มันเป็น url-regex-safe แพ็คเกจที่ได้รับการรับเลี้ยงอย่างน่าทึ่ง

ด้วยยอดดาวน์โหลดมากกว่า 1.2 ล้านครั้งภายในสองเดือน[^3], url-regex-safe แก้ไขปัญหาความปลอดภัยที่สำคัญในนิพจน์ทั่วไปในการตรวจจับ URL อื่นๆ แพ็คเกจนี้แสดงแนวทางของเราต่อโอเพ่นซอร์ส: การค้นหาปัญหาทั่วไป (ในกรณีนี้ ทำซ้ำ ช่องโหว่ในระบบตรวจสอบ URL) การสร้างโซลูชันที่มั่นคงและการบำรุงรักษาอย่างระมัดระวัง

Bree: การกำหนดตารางงานสมัยใหม่ด้วย Worker Threads

ที่ องค์กรบรี คือคำตอบของเราสำหรับความท้าทายทั่วไปของ Node.js: การกำหนดตารางงานที่เชื่อถือได้ bree แพ็คเกจที่มีดาว GitHub กว่า 3,100 ดวงมอบตัวกำหนดตารางงานที่ทันสมัยโดยใช้เธรดเวิร์กเกอร์ Node.js เพื่อประสิทธิภาพและความน่าเชื่อถือที่ดียิ่งขึ้น

[!หมายเหตุ] Bree ถูกสร้างขึ้นหลังจากที่เราช่วยบำรุงรักษา กำหนดการการนำบทเรียนที่เรียนรู้มาปรับใช้เพื่อสร้างตารางงานที่ดีขึ้น การมีส่วนร่วมของเราช่วยให้เราค้นหาวิธีปรับปรุงตารางงานได้

สิ่งที่ทำให้ Bree แตกต่างจากเครื่องมือจัดตารางงานอื่น ๆ เช่น Agenda:

  • ไม่มีการอ้างอิงภายนอก:ไม่เหมือนกับ Agenda ที่ต้องใช้ MongoDB แต่ Bree ไม่ต้องการ Redis หรือ MongoDB ในการจัดการสถานะงาน
  • เธรดคนงาน:Bree ใช้เธรดเวิร์กเกอร์ของ Node.js สำหรับกระบวนการแซนด์บ็อกซ์ ช่วยให้แยกและมีประสิทธิภาพดีขึ้น
  • API ที่เรียบง่าย:Bree นำเสนอการควบคุมโดยละเอียดด้วยความเรียบง่าย ทำให้สามารถนำความต้องการในการกำหนดตารางเวลาที่ซับซ้อนไปใช้ได้สะดวกยิ่งขึ้น
  • รองรับในตัว:สิ่งต่างๆ เช่น การโหลดซ้ำที่ราบรื่น งาน cron วันที่ และเวลาที่เป็นมิตรต่อมนุษย์จะรวมอยู่ตามค่าเริ่มต้น

บรีเป็นส่วนสำคัญของ forwardemail.netการจัดการงานเบื้องหลังที่สำคัญ เช่น การประมวลผลอีเมล การล้างข้อมูล และการบำรุงรักษาตามกำหนดเวลา การใช้ Bree ใน Forward Email แสดงให้เห็นถึงความมุ่งมั่นของเราในการใช้เครื่องมือของเราเองในการผลิต เพื่อให้แน่ใจว่าเครื่องมือเหล่านั้นตรงตามมาตรฐานความน่าเชื่อถือสูง

เรายังใช้และชื่นชมแพ็คเกจเธรดคนงานที่ยอดเยี่ยมอื่นๆ เช่น สระน้ำ และไคลเอนต์ HTTP เช่น สิบเอ็ดPiscina เช่นเดียวกับ Bree ใช้เธรดเวิร์กเกอร์ของ Node.js เพื่อการประมวลผลงานที่มีประสิทธิภาพ เราขอขอบคุณ แมทธิว ฮิลล์ซึ่งดูแลทั้ง undici และ piscina เนื่องจากมีส่วนสนับสนุน Node.js เป็นอย่างมาก Matteo ดำรงตำแหน่งในคณะกรรมการกำกับดูแลด้านเทคนิคของ Node.js และได้ปรับปรุงความสามารถของไคลเอนต์ HTTP ใน Node.js อย่างมาก

ส่งต่ออีเมล: โครงสร้างพื้นฐานอีเมลโอเพ่นซอร์ส

โครงการที่มีความทะเยอทะยานที่สุดของเราคือ ส่งต่ออีเมลบริการอีเมลโอเพ่นซอร์สที่ให้บริการการส่งต่ออีเมล การจัดเก็บ และบริการ API ที่เก็บข้อมูลหลักมีดาวบน GitHub มากกว่า 1,100 ดวง[^4] ซึ่งแสดงให้เห็นถึงความชื่นชมจากชุมชนที่มีต่อทางเลือกอื่นนอกเหนือจากบริการอีเมลที่เป็นกรรมสิทธิ์นี้

ที่ preview-email แพ็คเกจจากองค์กรนี้ซึ่งมียอดดาวน์โหลดมากกว่า 2.5 ล้านครั้งภายในสองเดือน[^5] ได้กลายเป็นเครื่องมือสำคัญสำหรับนักพัฒนาที่ทำงานกับเทมเพลตอีเมล โดยให้วิธีง่ายๆ ในการดูตัวอย่างอีเมลระหว่างการพัฒนา ช่วยแก้ปัญหาทั่วไปในการสร้างแอปพลิเคชันที่รองรับอีเมล

Lad: ยูทิลิตี้และเครื่องมือ Koa ที่จำเป็น

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

koa-better-error-handler: ปรับปรุงการจัดการข้อผิดพลาดสำหรับ Koa

koa-better-error-handler นำเสนอโซลูชันการจัดการข้อผิดพลาดที่ดีกว่าสำหรับแอปพลิเคชัน Koa ด้วยดาว GitHub มากกว่า 50 ดวง แพ็คเกจนี้จึงทำให้ ctx.throw สร้างข้อความแสดงข้อผิดพลาดที่เป็นมิตรกับผู้ใช้ในขณะที่แก้ไขข้อจำกัดหลายประการของตัวจัดการข้อผิดพลาดในตัวของ Koa:

  • ตรวจจับและจัดการข้อผิดพลาด DNS ของ Node.js ข้อผิดพลาดของ Mongoose และข้อผิดพลาดของ Redis อย่างเหมาะสม
  • การใช้งาน บูม เพื่อสร้างการตอบสนองต่อข้อผิดพลาดที่สอดคล้องและมีรูปแบบที่ดี
  • รักษาส่วนหัวไว้ (ไม่เหมือนกับตัวจัดการในตัวของ Koa)
  • รักษารหัสสถานะที่เหมาะสมแทนที่จะตั้งค่าเริ่มต้นเป็น 500
  • รองรับข้อความแฟลชและการรักษาเซสชัน
  • ให้รายการข้อผิดพลาด HTML สำหรับข้อผิดพลาดในการตรวจสอบ
  • รองรับประเภทการตอบสนองหลายประเภท (HTML, JSON และข้อความธรรมดา)

แพ็คเกจนี้มีค่าอย่างยิ่งเมื่อใช้งานควบคู่ไปด้วย koa-404-handler เพื่อการจัดการข้อผิดพลาดที่ครอบคลุมในแอปพลิเคชัน Koa

หนังสือเดินทาง: การรับรองความถูกต้องสำหรับแลด

@ladjs/passport ขยายมิดเดิลแวร์การพิสูจน์ตัวตน Passport.js ยอดนิยมด้วยการปรับปรุงเฉพาะสำหรับแอปพลิเคชันเว็บสมัยใหม่ แพ็คเกจนี้รองรับกลยุทธ์การพิสูจน์ตัวตนหลายแบบตั้งแต่เริ่มต้น:

  • การยืนยันตัวตนในพื้นที่ด้วยอีเมล
  • ลงชื่อเข้าใช้ด้วย Apple
  • การรับรองความถูกต้องของ GitHub
  • การรับรองความถูกต้องของ Google
  • การยืนยันด้วยรหัสผ่านครั้งเดียว (OTP)

แพ็คเกจนี้ปรับแต่งได้สูง ช่วยให้นักพัฒนาปรับแต่งชื่อฟิลด์และวลีให้ตรงกับความต้องการของแอปพลิเคชันได้ แพ็คเกจนี้ได้รับการออกแบบมาให้บูรณาการกับ Mongoose ได้อย่างราบรื่นสำหรับการจัดการผู้ใช้ ทำให้เป็นโซลูชันที่เหมาะสำหรับแอปพลิเคชันที่ใช้ Koa ซึ่งต้องการการตรวจสอบสิทธิ์ที่แข็งแกร่ง

สง่างาม: การปิดระบบแอปพลิเคชันอย่างสง่างาม

@ladjs/graceful แก้ปัญหาสำคัญในการปิดแอปพลิเคชัน Node.js ลงอย่างราบรื่น ด้วยดาว GitHub มากกว่า 70 ดวง แพ็คเกจนี้รับประกันว่าแอปพลิเคชันของคุณจะยุติการทำงานได้อย่างสมบูรณ์โดยไม่สูญเสียข้อมูลหรือทำให้การเชื่อมต่อหยุดชะงัก คุณสมบัติหลัก ได้แก่:

  • รองรับการปิดเซิร์ฟเวอร์ HTTP อย่างราบรื่น (Express/Koa/Fastify)
  • ปิดการเชื่อมต่อฐานข้อมูลอย่างสะอาด (MongoDB/Mongoose)
  • การปิดการขายลูกค้า Redis อย่างถูกต้อง
  • การจัดการตัวกำหนดตารางงานของ Bree
  • รองรับตัวจัดการการปิดระบบแบบกำหนดเอง
  • การตั้งค่าเวลาหมดเวลาที่สามารถกำหนดค่าได้
  • การบูรณาการกับระบบการบันทึกข้อมูล

แพ็คเกจนี้จำเป็นสำหรับแอปพลิเคชันการผลิตที่การปิดระบบโดยไม่คาดคิดอาจนำไปสู่การสูญเสียหรือความเสียหายของข้อมูล โดยการใช้ขั้นตอนการปิดระบบที่เหมาะสม @ladjs/graceful ช่วยให้มั่นใจถึงความน่าเชื่อถือและเสถียรภาพของแอปพลิเคชันของคุณ

Upptime: การตรวจสอบเวลาการทำงานของโอเพ่นซอร์ส

ที่ องค์กรอัปไทม์ แสดงถึงความมุ่งมั่นของเราในการตรวจสอบโอเพ่นซอร์สอย่างโปร่งใส upptime คลังข้อมูลนี้มีดาว GitHub มากกว่า 13,000 ดวง ทำให้เป็นหนึ่งในโครงการยอดนิยมที่เรามีส่วนร่วม Upptime มอบเครื่องมือตรวจสอบเวลาการทำงานและหน้าสถานะที่ขับเคลื่อนโดย GitHub ซึ่งทำงานได้โดยไม่ต้องมีเซิร์ฟเวอร์

เราใช้ Upptime สำหรับหน้าสถานะของเราเองที่ https://status.forwardemail.net โดยมีซอร์สโค้ดอยู่ที่ https://github.com/forwardemail/status.forwardemail.net.

สิ่งที่ทำให้ Upptime พิเศษคือสถาปัตยกรรม:

  • โอเพ่นซอร์ส 100%:ทุกส่วนประกอบเป็นโอเพ่นซอร์สอย่างสมบูรณ์และปรับแต่งได้
  • ขับเคลื่อนโดย GitHub:ใช้ประโยชน์จาก GitHub Actions, Issues และ Pages เพื่อโซลูชันการตรวจสอบที่ไม่มีเซิร์ฟเวอร์
  • ไม่จำเป็นต้องมีเซิร์ฟเวอร์:ไม่เหมือนเครื่องมือตรวจสอบแบบเดิม Upptime ไม่ต้องการให้คุณเรียกใช้หรือบำรุงรักษาเซิร์ฟเวอร์
  • หน้าสถานะอัตโนมัติ:สร้างหน้าสถานะสวยงามที่สามารถโฮสต์บน GitHub Pages ได้
  • การแจ้งเตือนอันทรงพลัง:บูรณาการกับช่องทางการแจ้งเตือนต่างๆ รวมถึงอีเมล SMS และ Slack

เพื่อปรับปรุงประสบการณ์ของผู้ใช้ เราได้บูรณาการ @octokit/คอร์ เข้าสู่ฐานโค้ด forwardemail.net เพื่อแสดงข้อมูลอัปเดตสถานะและเหตุการณ์แบบเรียลไทม์บนเว็บไซต์ของเราโดยตรง การผสานรวมนี้ทำให้ผู้ใช้ของเรามีความโปร่งใสชัดเจนในกรณีที่มีปัญหาใดๆ เกิดขึ้นทั่วทั้งสแต็กของเรา (เว็บไซต์, API, MongoDB, Redis, SQLite, SMTP, POP3, IMAP, Bree ฯลฯ) พร้อมการแจ้งเตือนแบบทันที การเปลี่ยนไอคอนแบดจ์ สีคำเตือน และอื่นๆ อีกมากมาย

ไลบรารี @octokit/core ช่วยให้เราสามารถดึงข้อมูลแบบเรียลไทม์จากคลังข้อมูล Upptime GitHub ของเรา ประมวลผลข้อมูล และแสดงข้อมูลในลักษณะที่เป็นมิตรต่อผู้ใช้ เมื่อบริการใดหยุดให้บริการหรือประสิทธิภาพลดลง ผู้ใช้จะได้รับการแจ้งเตือนทันทีผ่านตัวบ่งชี้ภาพโดยไม่ต้องออกจากแอปพลิเคชันหลัก การผสานรวมที่ราบรื่นนี้ช่วยให้ผู้ใช้ของเรามีข้อมูลล่าสุดเกี่ยวกับสถานะระบบของเราอยู่เสมอ ช่วยเพิ่มความโปร่งใสและความน่าเชื่อถือ

Upptime ได้รับการนำไปใช้งานโดยองค์กรต่างๆ หลายร้อยแห่งที่ต้องการหาวิธีที่โปร่งใสและเชื่อถือได้ในการตรวจสอบบริการของตนและแจ้งสถานะให้ผู้ใช้ทราบ ความสำเร็จของโครงการนี้แสดงให้เห็นถึงพลังของการสร้างเครื่องมือที่ใช้ประโยชน์จากโครงสร้างพื้นฐานที่มีอยู่ (ในกรณีนี้คือ GitHub) เพื่อแก้ไขปัญหาทั่วไปในรูปแบบใหม่ๆ

การมีส่วนสนับสนุนของเราต่อระบบนิเวศการส่งต่ออีเมล

แม้ว่าแพ็คเกจโอเพ่นซอร์สของเราจะถูกใช้โดยนักพัฒนาจากทั่วโลก แต่แพ็คเกจเหล่านี้ยังเป็นรากฐานของบริการ Forward Email ของเราอีกด้วย บทบาทคู่ขนานนี้—ในฐานะผู้สร้างและผู้ใช้เครื่องมือเหล่านี้—ทำให้เราได้รับมุมมองที่เป็นเอกลักษณ์เกี่ยวกับแอปพลิเคชันในโลกแห่งความเป็นจริงและผลักดันการปรับปรุงอย่างต่อเนื่อง

จากแพ็คเกจสู่การผลิต

การเดินทางจากแพ็คเกจแต่ละรายการไปสู่ระบบการผลิตที่เชื่อมโยงกันนั้นต้องอาศัยการบูรณาการและการขยายอย่างระมัดระวัง สำหรับอีเมลส่งต่อ กระบวนการนี้ประกอบด้วย:

  • ส่วนขยายที่กำหนดเอง:การสร้างส่วนขยายเฉพาะอีเมลการส่งต่อให้กับแพ็คเกจโอเพนซอร์สของเราที่ตอบสนองความต้องการเฉพาะของเรา
  • รูปแบบการบูรณาการ:การพัฒนารูปแบบวิธีการที่แพ็คเกจเหล่านี้โต้ตอบกันในสภาพแวดล้อมการผลิต
  • การเพิ่มประสิทธิภาพการทำงาน:ระบุและแก้ไขปัญหาคอขวดด้านประสิทธิภาพที่เกิดขึ้นในระดับขนาดใหญ่เท่านั้น
  • การเสริมความแข็งแกร่งด้านความปลอดภัย:การเพิ่มชั้นความปลอดภัยเพิ่มเติมที่เฉพาะเจาะจงสำหรับการจัดการอีเมลและการปกป้องข้อมูลของผู้ใช้

งานนี้แสดงถึงการพัฒนาหลายพันชั่วโมงเกินกว่าแพ็คเกจหลักเอง ส่งผลให้ได้บริการอีเมลที่แข็งแกร่งและปลอดภัยซึ่งใช้ประโยชน์จากสิ่งที่ดีที่สุดจากผลงานโอเพนซอร์สของเรา

วงจรข้อเสนอแนะ

บางทีสิ่งที่มีค่าที่สุดอย่างหนึ่งในการใช้แพ็คเกจของเราเองในการผลิตก็คือวงจรป้อนกลับที่เกิดขึ้น เมื่อเราพบข้อจำกัดหรือกรณีขอบในการส่งต่ออีเมล เราไม่ได้แค่แก้ไขในเครื่องเท่านั้น แต่เรายังปรับปรุงแพ็คเกจพื้นฐานอีกด้วย ซึ่งจะส่งผลดีต่อทั้งบริการของเราและชุมชนโดยรวม

แนวทางนี้ทำให้เกิดการปรับปรุงมากมาย:

  • การปิดระบบอย่างสง่างามของบรี:ความต้องการในการส่งต่ออีเมลสำหรับการปรับใช้แบบไม่มีเวลาหยุดทำงานทำให้มีความสามารถในการปิดระบบอย่างเหมาะสมยิ่งขึ้นใน Bree
  • การจดจำรูปแบบของเครื่องสแกนสแปม:รูปแบบสแปมในโลกแห่งความเป็นจริงที่พบในการส่งต่ออีเมลได้ส่งผลต่ออัลกอริทึมการตรวจจับของ Spam Scanner
  • การเพิ่มประสิทธิภาพการทำงานของห้องโดยสาร:การบันทึกข้อมูลปริมาณมากในการผลิตเผยให้เห็นโอกาสในการเพิ่มประสิทธิภาพใน Cabin ซึ่งเป็นประโยชน์ต่อผู้ใช้ทั้งหมด

โดยการรักษาวงจรอันมีคุณธรรมนี้ระหว่างการทำงานโอเพนซอร์สและบริการการผลิตของเรา เราจึงมั่นใจได้ว่าแพ็คเกจของเรายังคงเป็นโซลูชันที่ใช้งานได้จริงและผ่านการทดสอบการใช้งานจริง มากกว่าจะเป็นการนำไปใช้งานในเชิงทฤษฎี

หลักการสำคัญของการส่งต่ออีเมล: รากฐานเพื่อความเป็นเลิศ

การส่งต่ออีเมลได้รับการออกแบบตามหลักการพื้นฐานชุดหนึ่งที่เป็นแนวทางในการตัดสินใจพัฒนาทั้งหมดของเรา หลักการเหล่านี้มีรายละเอียดอยู่ใน เว็บไซต์เพื่อให้แน่ใจว่าบริการของเราเป็นมิตรต่อนักพัฒนา ปลอดภัย และเน้นความเป็นส่วนตัวของผู้ใช้

เป็นมิตรกับนักพัฒนาเสมอ เน้นความปลอดภัย และโปร่งใส

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

หลักการนี้แสดงอยู่ในเอกสารประกอบโดยละเอียดของเรา ข้อความแสดงข้อผิดพลาดที่ชัดเจน และการสื่อสารแบบเปิดเกี่ยวกับทั้งความสำเร็จและความท้าทาย ด้วยการทำให้ฐานโค้ดทั้งหมดของเราเป็นโอเพนซอร์ส เราเชิญชวนให้มีการตรวจสอบและร่วมมือกัน ทำให้ซอฟต์แวร์ของเราและระบบนิเวศน์ที่กว้างขึ้นแข็งแกร่งขึ้น

การยึดมั่นต่อหลักการพัฒนาซอฟต์แวร์ที่ได้รับการพิสูจน์แล้ว

เราปฏิบัติตามหลักการพัฒนาซอฟต์แวร์หลายประการที่ได้รับการพิสูจน์คุณค่ามานานหลายทศวรรษ:

  • MVC:การแยกข้อกังวลผ่านรูปแบบ Model-View-Controller
  • ปรัชญายูนิกซ์:การสร้างส่วนประกอบแบบโมดูลาร์ที่ทำสิ่งหนึ่งสิ่งใดได้ดี
  • KISS:การรักษาความเรียบง่ายและตรงไปตรงมา
  • DRY:อย่าทำซ้ำตัวเอง ส่งเสริมการนำโค้ดกลับมาใช้ใหม่
  • YAGNI:คุณไม่จำเป็นต้องใช้มันเพื่อหลีกเลี่ยงการเพิ่มประสิทธิภาพก่อนเวลาอันควร
  • ปัจจัยสิบสอง:ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างแอปพลิเคชันที่ทันสมัยและปรับขนาดได้
  • มีดโกนของ Occam:เลือกโซลูชั่นที่เรียบง่ายที่สุดที่ตรงตามความต้องการ
  • การใช้ Dogfood:ใช้ผลิตภัณฑ์ของเราเองอย่างกว้างขวาง

หลักการเหล่านี้ไม่ใช่แค่แนวคิดเชิงทฤษฎีเท่านั้น แต่ยังฝังแน่นอยู่ในแนวทางการพัฒนาของเราในแต่ละวันด้วย ตัวอย่างเช่น การยึดมั่นในปรัชญา Unix ของเรานั้นเห็นได้ชัดจากวิธีการที่เราสร้างโครงสร้างแพ็คเกจ npm ของเรา: โมดูลขนาดเล็กที่เน้นเฉพาะจุดซึ่งสามารถประกอบเข้าด้วยกันเพื่อแก้ปัญหาที่ซับซ้อนได้

มุ่งเป้าไปที่นักพัฒนาที่เริ่มต้นด้วยตนเอง

เราตั้งเป้าไปที่ผู้ที่มุ่งมั่น ตั้งใจ และ ราเมนมีกำไร นักพัฒนา การมุ่งเน้นนี้กำหนดทุกอย่างตั้งแต่รูปแบบการกำหนดราคาไปจนถึงการตัดสินใจทางเทคนิคของเรา เราเข้าใจถึงความท้าทายในการสร้างผลิตภัณฑ์ด้วยทรัพยากรที่จำกัด เนื่องจากเราเคยประสบกับปัญหาดังกล่าวมาแล้ว

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

หลักการในการปฏิบัติ: ฐานรหัสการส่งต่ออีเมล

หลักการเหล่านี้สามารถมองเห็นได้ชัดเจนในฐานโค้ด Forward Email ไฟล์ package.json ของเราเผยให้เห็นการเลือกการอ้างอิงที่รอบคอบ โดยแต่ละส่วนได้รับการเลือกให้สอดคล้องกับค่านิยมหลักของเรา:

  • แพ็คเกจที่เน้นด้านความปลอดภัย เช่น mailauth สำหรับการยืนยันตัวตนทางอีเมล์
  • เครื่องมือที่เป็นมิตรกับนักพัฒนา เช่น preview-email เพื่อให้แก้ไขได้ง่ายขึ้น
  • ส่วนประกอบแบบโมดูลาร์ เช่น p-* สาธารณูปโภคจาก Sindre Sorhus

ด้วยการปฏิบัติตามหลักการเหล่านี้อย่างสม่ำเสมอตลอดเวลา เราจึงได้สร้างบริการที่นักพัฒนาไว้วางใจได้ในโครงสร้างพื้นฐานอีเมลของตนเอง ซึ่งปลอดภัย เชื่อถือได้ และสอดคล้องกับค่านิยมของชุมชนโอเพ่นซอร์ส

ความเป็นส่วนตัวโดยการออกแบบ

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

  • การเข้ารหัสแบบ Zero Access:เราได้นำระบบที่ทำให้เราไม่สามารถอ่านอีเมล์ของผู้ใช้ได้ทางเทคนิค
  • การรวบรวมข้อมูลขั้นต่ำ:เราเก็บรวบรวมเฉพาะข้อมูลที่จำเป็นต่อการให้บริการเท่านั้น ไม่มีอะไรเพิ่มเติม
  • นโยบายที่โปร่งใสนโยบายความเป็นส่วนตัวของเราเขียนด้วยภาษาที่ชัดเจนและเข้าใจได้โดยไม่มีศัพท์กฎหมาย
  • การตรวจสอบโอเพนซอร์สฐานโค้ดโอเพ่นซอร์สของเราช่วยให้นักวิจัยด้านความปลอดภัยสามารถตรวจสอบการอ้างสิทธิ์ความเป็นส่วนตัวของเราได้

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

โอเพ่นซอร์สที่ยั่งยืน

เราเชื่อว่าซอฟต์แวร์โอเพ่นซอร์สต้องมีรูปแบบที่ยั่งยืนเพื่อเติบโตในระยะยาว แนวทางของเรามีดังนี้:

  • การสนับสนุนเชิงพาณิชย์:นำเสนอการสนับสนุนและบริการระดับพรีเมียมสำหรับเครื่องมือโอเพ่นซอร์สของเรา
  • การออกใบอนุญาตแบบสมดุล:ใช้ใบอนุญาตที่ปกป้องทั้งเสรีภาพของผู้ใช้และความยั่งยืนของโครงการ
  • การมีส่วนร่วมของชุมชน:มีส่วนร่วมอย่างแข็งขันกับผู้สนับสนุนเพื่อสร้างชุมชนที่ให้การสนับสนุน
  • แผนงานโปร่งใส:การแบ่งปันแผนการพัฒนาของเราเพื่อให้ผู้ใช้สามารถวางแผนได้อย่างเหมาะสม

ด้วยการมุ่งเน้นที่ความยั่งยืน เราจึงมั่นใจได้ว่าการสนับสนุนโอเพนซอร์สของเราจะสามารถเติบโตและปรับปรุงอย่างต่อเนื่องแทนที่จะถูกละเลย

ตัวเลขไม่โกหก: สถิติการดาวน์โหลด npm ที่น่าทึ่งของเรา

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

Top npm Packages by Downloads

[!IMPORTANT] แม้ว่าเราจะภูมิใจที่ได้ช่วยดูแลแพ็คเกจที่มียอดดาวน์โหลดสูงหลายรายการในระบบนิเวศ JavaScript แต่เราก็อยากยอมรับว่าแพ็คเกจเหล่านี้หลายรายการถูกสร้างขึ้นโดยนักพัฒนามากความสามารถคนอื่นๆ ในตอนแรก แพ็คเกจเช่น superagent และ supertest ถูกสร้างขึ้นโดย TJ Holowaychuk ซึ่งมีส่วนสนับสนุนโอเพ่นซอร์สอย่างมากมายและมีบทบาทสำคัญในการกำหนดรูปลักษณ์ของระบบนิเวศ Node.js

มุมมองภาพรวมของผลกระทบของเรา

ในช่วงระยะเวลาเพียงสองเดือนตั้งแต่เดือนกุมภาพันธ์ถึงมีนาคม พ.ศ. 2568 แพ็คเกจยอดนิยมที่เรามีส่วนสนับสนุนและช่วยรักษาจำนวนการดาวน์โหลดที่น่าทึ่งที่บันทึกไว้:

[!NOTE] แพ็คเกจอื่นๆ อีกหลายแพ็คเกจที่เราช่วยดูแลแต่ไม่ได้สร้างมีจำนวนการดาวน์โหลดที่สูงกว่า เช่น form-data (ดาวน์โหลดมากกว่า 738 ล้านครั้ง) toidentifier (ดาวน์โหลดมากกว่า 309 ล้านครั้ง) stackframe (ดาวน์โหลดมากกว่า 116 ล้านครั้ง) และ error-stack-parser (มียอดดาวน์โหลดมากกว่า 113 ล้านครั้ง) เรารู้สึกเป็นเกียรติที่ได้มีส่วนสนับสนุนแพ็คเกจเหล่านี้ โดยยังคงเคารพผลงานของผู้เขียนดั้งเดิม

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

Package Categories Distribution

ผลกระทบรายวันในระดับขนาดใหญ่

รูปแบบการดาวน์โหลดรายวันเผยให้เห็นการใช้งานในปริมาณมากอย่างสม่ำเสมอ โดยมียอดดาวน์โหลดสูงสุดที่หลายล้านครั้งต่อวัน[^13] ความสม่ำเสมอนี้บ่งบอกถึงความเสถียรและความน่าเชื่อถือของแพ็คเกจเหล่านี้ นักพัฒนาไม่ได้แค่ทดลองใช้เท่านั้น แต่ยังรวมแพ็คเกจเหล่านี้เข้ากับเวิร์กโฟลว์หลักและพึ่งพาแพ็คเกจเหล่านี้ทุกวันอีกด้วย

รูปแบบการดาวน์โหลดรายสัปดาห์แสดงให้เห็นตัวเลขที่น่าประทับใจยิ่งขึ้น โดยอยู่ที่ประมาณหลายสิบล้านครั้งต่อสัปดาห์อย่างสม่ำเสมอ[^14] ซึ่งถือเป็นการก้าวกระโดดครั้งใหญ่ในระบบนิเวศ JavaScript โดยที่แพ็คเกจเหล่านี้ทำงานในสภาพแวดล้อมการผลิตทั่วโลก

เกินกว่าตัวเลขดิบ

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

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

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

การสนับสนุนระบบนิเวศ: การสนับสนุนโอเพนซอร์สของเรา

[!TIP] ความยั่งยืนของโอเพ่นซอร์สไม่ได้หมายความถึงแค่การมีส่วนสนับสนุนโค้ดเท่านั้น แต่ยังรวมถึงการสนับสนุนนักพัฒนาที่ดูแลรักษาโครงสร้างพื้นฐานที่สำคัญด้วย

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

Andris Reinman: ผู้บุกเบิกโครงสร้างพื้นฐานอีเมล

แอนดริส เรนแมน เป็นผู้สร้าง หมายเหตุจดหมายไลบรารี่ส่งอีเมลยอดนิยมสำหรับ Node.js ที่มียอดดาวน์โหลดมากกว่า 14 ล้านครั้งต่อสัปดาห์[^15] ผลงานของเขายังขยายไปยังส่วนประกอบโครงสร้างพื้นฐานอีเมลที่สำคัญอื่นๆ เช่น เซิร์ฟเวอร์ SMTP, เมลพาร์เซอร์, และ ไวลด์ดั๊ก.

การสนับสนุนของเราช่วยให้แน่ใจถึงการบำรุงรักษาอย่างต่อเนื่องและการพัฒนาเครื่องมือที่จำเป็นเหล่านี้ซึ่งขับเคลื่อนการสื่อสารทางอีเมลสำหรับแอปพลิเคชัน Node.js มากมาย รวมถึงบริการ Forward Email ของเราเอง

Sindre Sorhus: ผู้บงการแพ็คเกจยูทิลิตี้

ซินเดร โซรุส เป็นหนึ่งในผู้มีส่วนสนับสนุนโอเพ่นซอร์สที่มีผลงานมากที่สุดในระบบนิเวศ JavaScript โดยมีแพ็คเกจ npm มากกว่า 1,000 รายการในชื่อของเขา ยูทิลิตี้ของเขาเช่น แผนที่พี, พี-ลองใหม่, และ ไอเอสสตรีม เป็นหน่วยพื้นฐานที่ใช้ทั่วทั้งระบบนิเวศของ Node.js

โดยการสนับสนุนงานของ Sindre เราช่วยสนับสนุนการพัฒนายูทิลิตี้ที่สำคัญเหล่านี้ซึ่งทำให้การพัฒนา JavaScript มีประสิทธิภาพและเชื่อถือได้มากขึ้น

การสนับสนุนเหล่านี้สะท้อนให้เห็นถึงความมุ่งมั่นของเราที่มีต่อระบบนิเวศโอเพ่นซอร์สที่กว้างขึ้น เราตระหนักดีว่าความสำเร็จของเรานั้นสร้างขึ้นจากรากฐานที่วางไว้โดยผู้สนับสนุนเหล่านี้และผู้สนับสนุนรายอื่นๆ และเรามุ่งมั่นที่จะสร้างความยั่งยืนให้กับระบบนิเวศทั้งหมด

การเปิดเผยช่องโหว่ด้านความปลอดภัยในระบบนิเวศ JavaScript

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

การช่วยเหลือโคอา-เราเตอร์

ในเดือนกุมภาพันธ์ 2019 นิคระบุถึงปัญหาสำคัญในการบำรุงรักษาแพ็คเกจ koa-router ยอดนิยม ขณะที่เขา รายงานบน Hacker Newsแพ็คเกจดังกล่าวถูกละทิ้งโดยผู้ดูแลระบบเดิม ส่งผลให้ช่องโหว่ด้านความปลอดภัยไม่ได้รับการแก้ไข และชุมชนไม่ได้รับการอัปเดต

[!WARNING] แพ็คเกจที่ถูกละทิ้งซึ่งมีช่องโหว่ด้านความปลอดภัยก่อให้เกิดความเสี่ยงอย่างมากต่อระบบนิเวศโดยรวม โดยเฉพาะอย่างยิ่งเมื่อมีการดาวน์โหลดหลายล้านครั้งต่อสัปดาห์

ในการตอบสนองนิคได้สร้าง @koa/เราเตอร์ และช่วยแจ้งเตือนชุมชนเกี่ยวกับสถานการณ์ดังกล่าว เขาดูแลแพ็คเกจสำคัญนี้มาโดยตลอด เพื่อให้แน่ใจว่าผู้ใช้ Koa มีโซลูชันการกำหนดเส้นทางที่ปลอดภัยและได้รับการดูแลอย่างดี

การแก้ไขช่องโหว่ ReDoS

ในปี 2020 นิคได้ระบุและแก้ไขประเด็นสำคัญ การปฏิเสธการให้บริการของนิพจน์ทั่วไป (ReDoS) ช่องโหว่ในการใช้งานอย่างแพร่หลาย url-regex แพ็กเกจ ช่องโหว่นี้ (SNYK-JS-URLREGEX-569472) อาจทำให้ผู้โจมตีสามารถปฏิเสธการให้บริการได้ด้วยการให้ข้อมูลอินพุตที่สร้างขึ้นเป็นพิเศษซึ่งทำให้เกิดการย้อนกลับที่ร้ายแรงในนิพจน์ทั่วไป

แทนที่จะแก้ไขแพ็คเกจที่มีอยู่เพียงอย่างเดียว Nick ได้สร้าง url-regex-safeการใช้งานที่เขียนขึ้นใหม่ทั้งหมดซึ่งแก้ไขช่องโหว่ในขณะที่ยังคงความเข้ากันได้กับ API ดั้งเดิม เขายังได้เผยแพร่ โพสต์บล็อกที่ครอบคลุม อธิบายถึงช่องโหว่และวิธีการบรรเทาผลกระทบ

งานนี้แสดงให้เห็นแนวทางของเราต่อความปลอดภัย ไม่ใช่แค่แก้ไขปัญหาเท่านั้น แต่ยังรวมถึงการสร้างความรู้แก่ชุมชนและเสนอทางเลือกที่มั่นคงเพื่อป้องกันไม่ให้เกิดปัญหาที่คล้ายคลึงกันในอนาคต

สนับสนุน Node.js และความปลอดภัยของ Chromium

นอกจากนี้ Nick ยังดำเนินการอย่างแข็งขันในการสนับสนุนการปรับปรุงความปลอดภัยในระบบนิเวศโดยรวม ในเดือนสิงหาคม 2020 เขาได้ระบุปัญหาความปลอดภัยที่สำคัญใน Node.js ที่เกี่ยวข้องกับการจัดการส่วนหัว HTTP ซึ่งมีการรายงานใน การลงทะเบียน.

ปัญหาที่เกิดขึ้นนี้ซึ่งเกิดจากแพทช์ใน Chromium อาจทำให้ผู้โจมตีสามารถข้ามมาตรการรักษาความปลอดภัยได้ การสนับสนุนของ Nick ช่วยให้มั่นใจได้ว่าปัญหาได้รับการแก้ไขอย่างทันท่วงที ช่วยปกป้องแอปพลิเคชัน Node.js หลายล้านรายการจากการถูกโจมตี

การรักษาความปลอดภัยโครงสร้างพื้นฐาน npm

ต่อมาในเดือนเดียวกันนั้น นิคได้ระบุปัญหาความปลอดภัยที่สำคัญอีกประการหนึ่ง ซึ่งในครั้งนี้เกิดขึ้นในโครงสร้างพื้นฐานอีเมลของ npm ตามที่รายงานใน การลงทะเบียนnpm ไม่ได้นำโปรโตคอลการตรวจสอบสิทธิ์อีเมล DMARC, SPF และ DKIM ไปใช้อย่างถูกต้อง ซึ่งเปิดโอกาสให้ผู้โจมตีสามารถส่งอีเมลฟิชชิ่งที่ดูเหมือนว่ามาจาก npm ได้

รายงานของ Nick นำไปสู่การปรับปรุงการรักษาความปลอดภัยของอีเมลของ npm ช่วยปกป้องนักพัฒนาหลายล้านคนที่ใช้ npm ในการจัดการแพ็คเกจจากการโจมตีฟิชชิ่งที่อาจเกิดขึ้น

การมีส่วนสนับสนุนของเราต่อระบบนิเวศการส่งต่ออีเมล

Forward Email ถูกสร้างขึ้นจากโครงการโอเพนซอร์สที่สำคัญหลายโครงการ เช่น Nodemailer, WildDuck และ mailauth ทีมงานของเราได้มีส่วนสนับสนุนโครงการเหล่านี้อย่างมาก โดยช่วยระบุและแก้ไขปัญหาเชิงลึกที่ส่งผลต่อการจัดส่งและความปลอดภัยของอีเมล

การปรับปรุงฟังก์ชันหลักของ Nodemailer

หมายเหตุจดหมาย เป็นกระดูกสันหลังของการส่งอีเมลใน Node.js และความช่วยเหลือของเราได้ช่วยให้มันแข็งแกร่งยิ่งขึ้น:

  • การปรับปรุงเซิร์ฟเวอร์ SMTP:เราได้แก้ไขข้อบกพร่องในการแยกวิเคราะห์ ปัญหาการจัดการสตรีม และปัญหาการกำหนดค่า TLS ในส่วนประกอบเซิร์ฟเวอร์ SMTP แล้ว[^16][^17]
  • การปรับปรุงตัวแยกจดหมาย:เราได้แก้ไขข้อผิดพลาดในการถอดรหัสลำดับอักขระและปัญหาตัวแยกวิเคราะห์ที่อยู่ซึ่งอาจทำให้การประมวลผลอีเมลล้มเหลว[^18][^19]

การสนับสนุนเหล่านี้ช่วยให้แน่ใจว่า Nodemailer ยังคงเป็นรากฐานที่เชื่อถือได้สำหรับการประมวลผลอีเมลในแอปพลิเคชัน Node.js รวมถึงการส่งต่ออีเมล

การพัฒนาการตรวจสอบสิทธิ์อีเมลด้วย Mailauth

ไมลอธ ให้ฟังก์ชันการตรวจสอบยืนยันอีเมลที่สำคัญ และการสนับสนุนของเราได้ปรับปรุงความสามารถของฟังก์ชันดังกล่าวได้อย่างมีนัยสำคัญ:

  • การปรับปรุงการตรวจสอบ DKIM:เราค้นพบและรายงานว่า X/Twitter มีปัญหาแคช DNS ส่งผลให้ DKIM สำหรับข้อความขาออกล้มเหลว และรายงานเรื่องนี้ที่ Hacker One[^20]
  • การปรับปรุง DMARC และ ARC:เราได้แก้ไขปัญหาเกี่ยวกับการตรวจสอบ DMARC และ ARC ซึ่งอาจนำไปสู่ผลลัพธ์การตรวจสอบสิทธิ์ที่ไม่ถูกต้อง[^21][^22]
  • การเพิ่มประสิทธิภาพการทำงาน:เราได้มีส่วนสนับสนุนในการเพิ่มประสิทธิภาพเพื่อปรับปรุงประสิทธิภาพของกระบวนการตรวจสอบอีเมล[^23][^24][^25][^26]

การปรับปรุงเหล่านี้ช่วยให้มั่นใจได้ว่าการตรวจสอบอีเมลนั้นถูกต้องและเชื่อถือได้ ช่วยปกป้องผู้ใช้จากการโจมตีแบบฟิชชิ่งและการปลอมแปลง

การปรับปรุงเวลาการทำงานที่สำคัญ

การสนับสนุนของเราต่อ Upptime ประกอบด้วย:

  • การตรวจสอบใบรับรอง SSL:เราได้เพิ่มฟังก์ชันการทำงานเพื่อตรวจสอบวันหมดอายุของใบรับรอง SSL เพื่อป้องกันการหยุดทำงานที่ไม่คาดคิดเนื่องจากใบรับรองหมดอายุ[^27]
  • รองรับหมายเลข SMS หลายหมายเลข:เราได้นำการสนับสนุนไปใช้กับการแจ้งเตือนสมาชิกในทีมหลายคนผ่านทาง SMS เมื่อมีเหตุการณ์เกิดขึ้น ซึ่งจะช่วยปรับปรุงเวลาตอบสนอง[^28]
  • การแก้ไขการตรวจสอบ IPv6:เราได้แก้ไขปัญหาในการตรวจสอบการเชื่อมต่อ IPv6 เพื่อให้แน่ใจว่าการตรวจสอบแม่นยำยิ่งขึ้นในสภาพแวดล้อมเครือข่ายสมัยใหม่[^29]
  • รองรับโหมดมืด/สว่าง:เราได้เพิ่มการรองรับธีมเพื่อปรับปรุงประสบการณ์การใช้งานของหน้าสถานะ[^31]
  • รองรับ TCP-Ping ที่ดีขึ้น:เราได้ปรับปรุงฟังก์ชันการ ping ของ TCP เพื่อให้การทดสอบการเชื่อมต่อมีความน่าเชื่อถือมากยิ่งขึ้น[^32]

การปรับปรุงเหล่านี้ไม่เพียงแต่เป็นประโยชน์ต่อการตรวจสอบสถานะของ Forward Email เท่านั้น แต่ยังพร้อมใช้งานสำหรับชุมชนผู้ใช้ Upptime ทั้งหมดอีกด้วย ซึ่งแสดงให้เห็นถึงความมุ่งมั่นของเราในการปรับปรุงเครื่องมือที่เราพึ่งพา

กาวที่ยึดทุกอย่างเข้าด้วยกัน: รหัสที่กำหนดเองตามขนาด

แม้ว่าแพ็กเกจ npm และการมีส่วนสนับสนุนต่อโครงการที่มีอยู่ของเราจะมีนัยสำคัญ แต่โค้ดแบบกำหนดเองที่ผสานรวมส่วนประกอบเหล่านี้เข้าด้วยกันนั้นแสดงให้เห็นถึงความเชี่ยวชาญด้านเทคนิคของเราได้อย่างแท้จริง ฐานโค้ด Forward Email เป็นตัวแทนของความพยายามในการพัฒนาตลอดหนึ่งทศวรรษ ย้อนกลับไปในปี 2017 เมื่อโครงการเริ่มต้นขึ้น การส่งต่ออีเมล์ฟรี ก่อนจะรวมเข้าเป็น monorepo

ความพยายามพัฒนาที่ยิ่งใหญ่

ขนาดของโค้ดการรวมแบบกำหนดเองนี้ถือว่าน่าประทับใจ:

  • ยอดบริจาครวม:มียอดการคอมมิชชันมากกว่า 3,217 ครั้ง
  • ขนาดฐานโค้ด:โค้ดมากกว่า 421,545 บรรทัดในไฟล์ JavaScript, Pug, CSS และ JSON[^33]

ซึ่งเป็นตัวแทนของการทำงานพัฒนา เซสชันแก้ไขข้อบกพร่อง และการปรับปรุงประสิทธิภาพการทำงานหลายพันชั่วโมง นับเป็น "สูตรลับ" ที่ช่วยเปลี่ยนแพ็คเกจแต่ละรายการให้กลายเป็นบริการที่เชื่อมโยงกันและเชื่อถือได้ซึ่งลูกค้าหลายพันรายใช้เป็นประจำทุกวัน

การรวมการอ้างอิงแกนหลัก

ฐานโค้ดการส่งต่ออีเมลจะรวมสิ่งที่ต้องพึ่งพาต่างๆ มากมายเข้าเป็นหนึ่งเดียวกันอย่างราบรื่น:

  • การประมวลผลอีเมล์:รวม Nodemailer สำหรับการส่ง, SMTP Server สำหรับการรับ และ Mailparser สำหรับการแยกวิเคราะห์
  • การรับรอง:ใช้ Mailauth สำหรับการตรวจสอบ DKIM, SPF, DMARC และ ARC
  • การแก้ไข DNS:ใช้ประโยชน์จาก Tangerine สำหรับ DNS-over-HTTPS ด้วยการแคชทั่วโลก
  • การเชื่อมต่อ MX:ใช้ mx-connect ร่วมกับการรวม Tangerine เพื่อการเชื่อมต่อเซิร์ฟเวอร์อีเมลที่เชื่อถือได้
  • การจัดตารางงาน:ใช้ Bree สำหรับการประมวลผลงานพื้นหลังที่เชื่อถือได้ด้วยเธรดเวิร์กเกอร์
  • การทำเทมเพลต:ใช้เทมเพลตอีเมลเพื่อนำสไตล์ชีตจากเว็บไซต์มาใช้ซ้ำในการสื่อสารกับลูกค้า
  • พื้นที่เก็บข้อมูลอีเมล:ใช้งานกล่องจดหมาย SQLite ที่เข้ารหัสเป็นรายบุคคลโดยใช้การเข้ารหัสแบบ better-sqlite3-multiple-ciphers พร้อมการเข้ารหัส ChaCha20-Poly1305 เพื่อความเป็นส่วนตัวที่ปลอดภัยแบบควอนตัม ช่วยให้แยกผู้ใช้ออกจากกันได้อย่างสมบูรณ์ และเฉพาะผู้ใช้เท่านั้นที่มีสิทธิ์เข้าถึงกล่องจดหมายของตน

การบูรณาการแต่ละครั้งเหล่านี้ต้องได้รับการพิจารณาอย่างรอบคอบถึงกรณีขอบ ผลกระทบต่อประสิทธิภาพ และข้อกังวลด้านความปลอดภัย ผลลัพธ์ที่ได้คือระบบที่แข็งแกร่งซึ่งจัดการธุรกรรมอีเมลนับล้านรายการได้อย่างน่าเชื่อถือ การใช้งาน SQLite ของเรายังใช้ประโยชน์จาก msgpackr สำหรับการสร้างอนุกรมไบนารีที่มีประสิทธิภาพและ WebSockets (ผ่าน ws) สำหรับการอัปเดตสถานะแบบเรียลไทม์ทั่วทั้งโครงสร้างพื้นฐานของเรา

โครงสร้างพื้นฐาน DNS พร้อม Tangerine และ mx-connect

ส่วนประกอบที่สำคัญอย่างหนึ่งของโครงสร้างพื้นฐานของ Forward Email คือระบบการแก้ไข DNS ของเรา ซึ่งสร้างขึ้นโดยใช้แพ็คเกจหลักสองแพ็คเกจ:

  • ส้มเขียวหวาน:การใช้งาน Node.js DNS-over-HTTPS ของเราช่วยให้สามารถแทนที่ตัวแก้ไข DNS มาตรฐานได้อย่างง่ายดายด้วยการลองใหม่ การหมดเวลา การหมุนเวียนเซิร์ฟเวอร์อัจฉริยะ และการรองรับแคชในตัว

  • mx-เชื่อมต่อแพ็คเกจนี้จะสร้างการเชื่อมต่อ TCP กับเซิร์ฟเวอร์ MX โดยนำโดเมนเป้าหมายหรือที่อยู่อีเมลมากำหนดเซิร์ฟเวอร์ MX ที่เหมาะสม และเชื่อมต่อกับเซิร์ฟเวอร์เหล่านั้นตามลำดับความสำคัญ

เราได้บูรณาการ Tangerine เข้ากับ mx-connect ผ่าน ดึงคำขอ #4เพื่อให้แน่ใจว่าคำขอ DNS บนชั้นแอปพลิเคชันผ่าน HTTP ตลอดกระบวนการส่งต่ออีเมล การดำเนินการดังกล่าวช่วยให้สามารถแคช DNS ทั่วโลกได้ในระดับขนาดใหญ่ด้วยความสม่ำเสมอ 1:1 ในทุกภูมิภาค แอปพลิเคชัน หรือกระบวนการ ซึ่งถือเป็นสิ่งสำคัญสำหรับการส่งอีเมลที่เชื่อถือได้ในระบบแบบกระจาย

ผลกระทบต่อองค์กร: จากโอเพ่นซอร์สสู่โซลูชันที่สำคัญต่อภารกิจ

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

กรณีศึกษาเกี่ยวกับโครงสร้างพื้นฐานอีเมลที่สำคัญต่อภารกิจ

ความมุ่งมั่นของเราที่มีต่อความน่าเชื่อถือ ความเป็นส่วนตัว และหลักการโอเพ่นซอร์สทำให้ Forward Email เป็นตัวเลือกที่เชื่อถือได้สำหรับองค์กรที่มีข้อกำหนดด้านอีเมลที่เข้มงวด:

  • สถาบันการศึกษา: ตามรายละเอียดในของเรา กรณีศึกษาการส่งต่ออีเมล์ของศิษย์เก่ามหาวิทยาลัยชั้นนำต่างพึ่งพาโครงสร้างพื้นฐานของเราเพื่อรักษาการเชื่อมต่อตลอดชีวิตกับศิษย์เก่าหลายแสนคนด้วยบริการส่งต่ออีเมลที่เชื่อถือได้

  • โซลูชัน Enterprise Linux: เดอะ กรณีศึกษาเกี่ยวกับอีเมลองค์กรของ Ubuntu ตามมาตรฐาน Canonical แสดงให้เห็นว่าแนวทางโอเพ่นซอร์สของเรานั้นสอดคล้องกับความต้องการของผู้ให้บริการ Linux ระดับองค์กรได้อย่างสมบูรณ์แบบ โดยมอบความโปร่งใสและการควบคุมที่พวกเขาต้องการ

  • มูลนิธิโอเพ่นซอร์ส:บางทีสิ่งที่ยืนยันได้มากที่สุดก็คือความร่วมมือของเรากับมูลนิธิ Linux ตามที่ระบุไว้ใน กรณีศึกษาเกี่ยวกับอีเมลขององค์กร Linux Foundationซึ่งบริการของเราจะช่วยขับเคลื่อนการสื่อสารให้กับองค์กรที่ดูแลการพัฒนา Linux

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

ทศวรรษแห่งโอเพ่นซอร์ส: มองไปข้างหน้า

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

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

ในปีต่อๆ ไป เรามุ่งมั่นที่จะ:

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

เราเชื่อว่าอนาคตของการพัฒนาซอฟต์แวร์จะเป็นแบบเปิด ร่วมมือกัน และสร้างขึ้นบนรากฐานของความไว้วางใจ โดยเราหวังว่าจะได้มีส่วนเล็กๆ น้อยๆ ในการสร้างอนาคตนั้นด้วยการสนับสนุนแพ็คเกจคุณภาพสูงที่เน้นด้านความปลอดภัยให้กับระบบนิเวศ JavaScript ต่อไป

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

[^1]: สถิติการดาวน์โหลด npm สำหรับ cabin เมษายน 2025 [^2]: สถิติการดาวน์โหลด npm สำหรับ bson-objectid กุมภาพันธ์-มีนาคม 2025 [^3]: สถิติการดาวน์โหลด npm สำหรับ url-regex-safe เมษายน 2025 [^4]: จำนวนดาว GitHub สำหรับ forwardemail/forwardemail.net ณ เมษายน 2025 [^5]: สถิติการดาวน์โหลด npm สำหรับ preview-email เมษายน 2025 [^7]: สถิติการดาวน์โหลด npm สำหรับ superagent กุมภาพันธ์-มีนาคม 2025 [^8]: สถิติการดาวน์โหลด npm สำหรับ supertest กุมภาพันธ์-มีนาคม 2025 [^9]: สถิติการดาวน์โหลด npm สำหรับ preview-email กุมภาพันธ์-มีนาคม 2025 [^10]: สถิติการดาวน์โหลด npm สำหรับ cabin กุมภาพันธ์-มีนาคม 2025 [^11]: สถิติการดาวน์โหลด npm สำหรับ url-regex-safe กุมภาพันธ์-มีนาคม 2025 [^12]: สถิติการดาวน์โหลด npm สำหรับ spamscanner กุมภาพันธ์-มีนาคม 2025 [^13]: รูปแบบการดาวน์โหลดรายวันจากสถิติ npm เมษายน 2025 [^14]: รูปแบบการดาวน์โหลดรายสัปดาห์จากสถิติ npm เมษายน 2025 [^15]: สถิติการดาวน์โหลด npm สำหรับ nodemailer เมษายน 2025 [^16]: https://github.com/nodemailer/smtp-server/issues/155 [^17]: https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min [^18]: https://github.com/nodemailer/mailparser/issues/261 [^19]: https://github.com/nodemailer/nodemailer/issues/1102 [^20]: https://github.com/postalsys/mailauth/issues/30 [^21]: https://github.com/postalsys/mailauth/issues/58 [^22]: https://github.com/postalsys/mailauth/issues/48 [^23]: https://github.com/postalsys/mailauth/issues/74 [^24]: https://github.com/postalsys/mailauth/issues/75 [^25]: https://github.com/postalsys/mailauth/issues/60 [^26]: https://github.com/postalsys/mailauth/issues/73 [^27]: อิงตามปัญหา GitHub ในที่เก็บ Upptime [^28]: อิงตามปัญหา GitHub ในที่เก็บ Upptime [^29]: อิงตามปัญหา GitHub ในที่เก็บ Upptime [^30]: สถิติการดาวน์โหลด npm สำหรับ bree กุมภาพันธ์-มีนาคม 2025 [^31]: อิงตามคำขอ pull ของ GitHub ถึง Upptime [^32]: อิงตามคำขอ pull ของ GitHub ถึง Upptime [^34]: สถิติการดาวน์โหลด npm สำหรับ koa กุมภาพันธ์-มีนาคม 2025 [^35]: สถิติการดาวน์โหลด npm สำหรับ @koa/router กุมภาพันธ์-มีนาคม 2025 [^36]: สถิติการดาวน์โหลด npm สำหรับ koa-router กุมภาพันธ์-มีนาคม 2025 [^37]: สถิติการดาวน์โหลด npm สำหรับ url-regex กุมภาพันธ์-มีนาคม 2025 [^38]: สถิติการดาวน์โหลด npm สำหรับ @breejs/later กุมภาพันธ์-มีนาคม 2025 [^39]: สถิติการดาวน์โหลด npm สำหรับเทมเพลตอีเมล กุมภาพันธ์-มีนาคม 2025 [^40]: สถิติการดาวน์โหลด npm สำหรับ get-paths กุมภาพันธ์-มีนาคม 2025 [^41]: สถิติการดาวน์โหลด npm สำหรับ dotenv-parse-variables กุมภาพันธ์-มีนาคม 2025 [^42]: สถิติการดาวน์โหลด npm สำหรับ @koa/multer กุมภาพันธ์-มีนาคม 2025