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

NPM packages billion downloads ecosystem

คำนำ

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

ผู้บุกเบิกที่ไว้วางใจเรา: Isaac Z. Schlueter และ Forward Email

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

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

Note

สำหรับผู้ที่สนใจประวัติของ Node.js มีสารคดีที่ยอดเยี่ยมซึ่งบันทึกการพัฒนาไว้ รวมถึง The Story of Node.js และ 10 Things I Regret About Node.js - Ryan Dahl เว็บไซต์ส่วนตัวของ Ryan Dahl personal website ยังมีข้อมูลเชิงลึกที่มีคุณค่าเกี่ยวกับงานของเขา

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

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

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

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

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

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

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

คณะกรรมการเทคนิค Express และการมีส่วนร่วมหลัก

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

Important

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

ในฐานะสมาชิกของ คณะกรรมการเทคนิค Express Nick แสดงความใส่ใจในรายละเอียดอย่างมากในประเด็นต่างๆ เช่น การชี้แจงเอกสาร req.originalUrl และการแก้ไขปัญหาการจัดการ multipart form

การมีส่วนร่วมใน Koa Framework

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

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

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

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

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

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

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

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

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

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

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

Spam Scanner: การต่อสู้กับการละเมิดอีเมล

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

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

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

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

Note

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

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

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

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

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

Forward Email: โครงสร้างพื้นฐานอีเมลแบบโอเพนซอร์ส

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

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

Lad: ยูทิลิตี้และเครื่องมือสำคัญสำหรับ Koa

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

koa-better-error-handler: การจัดการข้อผิดพลาดที่ดีขึ้นสำหรับ Koa

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

  • ตรวจจับและจัดการข้อผิดพลาด Node.js DNS, ข้อผิดพลาด Mongoose และข้อผิดพลาด Redis อย่างถูกต้อง
  • ใช้ Boom สำหรับสร้างการตอบสนองข้อผิดพลาดที่สม่ำเสมอและมีรูปแบบดี
  • รักษา headers (ต่างจากตัวจัดการในตัวของ Koa)
  • รักษารหัสสถานะที่เหมาะสมแทนที่จะตั้งเป็น 500 โดยค่าเริ่มต้น
  • รองรับข้อความ flash และการรักษา session
  • ให้รายการข้อผิดพลาด HTML สำหรับข้อผิดพลาดการตรวจสอบข้อมูล
  • รองรับหลายประเภทการตอบสนอง (HTML, JSON และข้อความธรรมดา) แพ็กเกจนี้มีคุณค่าอย่างยิ่งเมื่อใช้ควบคู่กับ koa-404-handler สำหรับการจัดการข้อผิดพลาดอย่างครบถ้วนในแอปพลิเคชัน Koa

passport: การยืนยันตัวตนสำหรับ Lad

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

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

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

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

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

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

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

Upptime: การตรวจสอบสถานะออนไลน์แบบโอเพนซอร์ส

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

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

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

การมีส่วนร่วมของเราในระบบนิเวศ Forward Email

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

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

การเดินทางจากแพ็กเกจเดี่ยวไปสู่ระบบการผลิตที่สอดคล้องกันเกี่ยวข้องกับการผสานรวมและขยายอย่างรอบคอบ สำหรับ Forward Email กระบวนการนี้รวมถึง:

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

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

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

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

แนวทางนี้นำไปสู่การปรับปรุงมากมาย:

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

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

หลักการสำคัญของ Forward Email: รากฐานสู่ความเป็นเลิศ

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

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

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

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

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

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

  • MVC: การแยกความรับผิดชอบผ่านรูปแบบ Model-View-Controller
  • Unix Philosophy: การสร้างส่วนประกอบแบบโมดูลที่ทำงานอย่างใดอย่างหนึ่งได้ดี
  • KISS: ทำให้ง่ายและตรงไปตรงมา
  • DRY: อย่าทำซ้ำตัวเอง ส่งเสริมการใช้ซ้ำของโค้ด
  • YAGNI: คุณจะไม่ต้องการมัน หลีกเลี่ยงการปรับแต่งก่อนเวลา
  • Twelve Factor: ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างแอปพลิเคชันสมัยใหม่ที่ปรับขนาดได้
  • Occam's razor: เลือกวิธีแก้ปัญหาที่ง่ายที่สุดที่ตอบโจทย์ความต้องการ
  • Dogfooding: ใช้ผลิตภัณฑ์ของเราเองอย่างกว้างขวาง หลักการเหล่านี้ไม่ใช่แค่แนวคิดทางทฤษฎีเท่านั้น—แต่ฝังอยู่ในแนวปฏิบัติการพัฒนาของเราทุกวัน ตัวอย่างเช่น การที่เรายึดมั่นในปรัชญา Unix นั้นเห็นได้ชัดจากวิธีที่เราโครงสร้างแพ็กเกจ npm ของเรา: โมดูลขนาดเล็กที่เน้นจุดประสงค์เฉพาะซึ่งสามารถนำมาประกอบกันเพื่อแก้ปัญหาที่ซับซ้อนได้

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

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

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

หลักการในทางปฏิบัติ: โค้ดเบสของ Forward Email

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

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

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

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

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

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

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

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

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

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

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

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

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

Top npm Packages by Downloads

Important

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

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

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

Note

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

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

Package Categories Distribution

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

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

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

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

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

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

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

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

Tip

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

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

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

Andris Reinman คือผู้สร้าง Nodemailer ไลบรารีส่งอีเมลที่ได้รับความนิยมสูงสุดสำหรับ Node.js โดยมีการดาวน์โหลดมากกว่า 14 ล้านครั้งต่อสัปดาห์[24] งานของเขายังครอบคลุมถึงส่วนประกอบโครงสร้างพื้นฐานอีเมลที่สำคัญอื่น ๆ เช่น SMTP Server, Mailparser, และ WildDuck

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

Sindre Sorhus: อัจฉริยะด้านแพ็กเกจยูทิลิตี้

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

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

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

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

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

การช่วยเหลือ Koa-Router

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

Warning

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

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

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

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

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

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

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

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

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

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

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

การมีส่วนร่วมของเราในระบบนิเวศ Forward Email

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

การเสริมประสิทธิภาพฟังก์ชันหลักของ Nodemailer

Nodemailer เป็นแกนหลักของการส่งอีเมลใน Node.js และการมีส่วนร่วมของเราได้ช่วยทำให้มันแข็งแกร่งขึ้น:

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

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

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

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

  • การปรับปรุงการตรวจสอบ DKIM: เราค้นพบและรายงานว่า X/Twitter มีปัญหา DNS cache ที่ทำให้ DKIM ล้มเหลวสำหรับข้อความขาออกของพวกเขา โดยรายงานผ่าน Hacker One[29]
  • การปรับปรุง DMARC และ ARC: เราได้แก้ไขปัญหาการตรวจสอบ DMARC และ ARC ที่อาจทำให้ผลการตรวจสอบไม่ถูกต้อง[30][31]
  • การเพิ่มประสิทธิภาพ: เรามีส่วนร่วมในการปรับปรุงประสิทธิภาพที่ช่วยให้กระบวนการตรวจสอบอีเมลทำงานได้ดีขึ้น[32][33][34][35]

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

การปรับปรุงสำคัญใน Upptime

การมีส่วนร่วมของเราใน Upptime รวมถึง:

  • การตรวจสอบใบรับรอง SSL: เราเพิ่มฟังก์ชันการตรวจสอบวันหมดอายุของใบรับรอง SSL ป้องกันการหยุดทำงานโดยไม่คาดคิดเนื่องจากใบรับรองหมดอายุ[36]
  • รองรับหมายเลข SMS หลายหมายเลข: เราได้เพิ่มการรองรับการแจ้งเตือนสมาชิกทีมหลายคนผ่าน SMS เมื่อเกิดเหตุการณ์ ช่วยปรับปรุงเวลาตอบสนอง[37]
  • แก้ไขการตรวจสอบ IPv6: เราแก้ไขปัญหาการตรวจสอบการเชื่อมต่อ IPv6 เพื่อให้การตรวจสอบแม่นยำขึ้นในสภาพแวดล้อมเครือข่ายสมัยใหม่[38]
  • รองรับโหมดมืด/สว่าง: เราเพิ่มการรองรับธีมเพื่อปรับปรุงประสบการณ์ผู้ใช้ของหน้าสถานะ[39]
  • ปรับปรุงการรองรับ TCP-Ping: เราได้ปรับปรุงฟังก์ชัน TCP ping เพื่อให้การทดสอบการเชื่อมต่อมีความน่าเชื่อถือมากขึ้น[40] การปรับปรุงเหล่านี้ไม่เพียงแต่เป็นประโยชน์ต่อการตรวจสอบสถานะของ Forward Email เท่านั้น แต่ยังเปิดให้ชุมชนผู้ใช้ Upptime ทั้งหมดได้ใช้ด้วย แสดงให้เห็นถึงความมุ่งมั่นของเราในการพัฒนาเครื่องมือที่เราอาศัยอยู่

กาวที่ยึดทุกอย่างเข้าด้วยกัน: โค้ดที่กำหนดเองในระดับใหญ่

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

ความพยายามในการพัฒนาขนาดใหญ่

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

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

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

การผสานรวม Dependencies หลัก

ฐานโค้ดของ Forward Email ผสานรวม dependencies หลายตัวให้เป็นระบบที่ไร้รอยต่อ:

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

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

โครงสร้างพื้นฐาน DNS ด้วย Tangerine และ mx-connect

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

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

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

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

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

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

กรณีศึกษาในโครงสร้างพื้นฐานอีเมลที่มีความสำคัญสูง

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

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

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

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

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

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

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

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

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

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

เราเชื่อว่าวิธีการพัฒนาซอฟต์แวร์ในอนาคตจะเป็นแบบเปิด ร่วมมือกัน และสร้างบนพื้นฐานของความไว้วางใจ โดยการมีส่วนร่วมอย่างต่อเนื่องในแพ็กเกจคุณภาพสูงที่เน้นความปลอดภัยในระบบนิเวศ 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 ↩︎

  6. สถิติการดาวน์โหลด npm สำหรับ superagent, กุมภาพันธ์-มีนาคม 2025 ↩︎

  7. สถิติการดาวน์โหลด npm สำหรับ supertest, กุมภาพันธ์-มีนาคม 2025 ↩︎

  8. สถิติการดาวน์โหลด npm สำหรับ koa, กุมภาพันธ์-มีนาคม 2025 ↩︎

  9. สถิติการดาวน์โหลด npm สำหรับ @koa/router, กุมภาพันธ์-มีนาคม 2025 ↩︎

  10. สถิติการดาวน์โหลด npm สำหรับ koa-router, กุมภาพันธ์-มีนาคม 2025 ↩︎

  11. สถิติการดาวน์โหลด npm สำหรับ url-regex, กุมภาพันธ์-มีนาคม 2025 ↩︎

  12. สถิติการดาวน์โหลด npm สำหรับ preview-email, กุมภาพันธ์-มีนาคม 2025 ↩︎

  13. สถิติการดาวน์โหลด npm สำหรับ cabin, กุมภาพันธ์-มีนาคม 2025 ↩︎

  14. สถิติการดาวน์โหลด npm สำหรับ @breejs/later, กุมภาพันธ์-มีนาคม 2025 ↩︎

  15. สถิติการดาวน์โหลด npm สำหรับ email-templates, กุมภาพันธ์-มีนาคม 2025 ↩︎

  16. สถิติการดาวน์โหลด npm สำหรับ get-paths, กุมภาพันธ์-มีนาคม 2025 ↩︎

  17. สถิติการดาวน์โหลด npm สำหรับ url-regex-safe, กุมภาพันธ์-มีนาคม 2025 ↩︎

  18. สถิติการดาวน์โหลด npm สำหรับ dotenv-parse-variables, กุมภาพันธ์-มีนาคม 2025 ↩︎

  19. สถิติการดาวน์โหลด npm สำหรับ @koa/multer, กุมภาพันธ์-มีนาคม 2025 ↩︎

  20. สถิติการดาวน์โหลด npm สำหรับ spamscanner, กุมภาพันธ์-มีนาคม 2025 ↩︎

  21. สถิติการดาวน์โหลด npm สำหรับ bree, กุมภาพันธ์-มีนาคม 2025 ↩︎

  22. รูปแบบการดาวน์โหลดรายวันจากสถิติ npm, เมษายน 2025 ↩︎

  23. รูปแบบการดาวน์โหลดรายสัปดาห์จากสถิติ npm, เมษายน 2025 ↩︎

  24. สถิติการดาวน์โหลด npm สำหรับ nodemailer, เมษายน 2025 ↩︎

  25. https://github.com/nodemailer/smtp-server/issues/155 ↩︎

  26. https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min ↩︎

  27. https://github.com/nodemailer/mailparser/issues/261 ↩︎

  28. https://github.com/nodemailer/nodemailer/issues/1102 ↩︎

  29. https://github.com/postalsys/mailauth/issues/30 ↩︎

  30. https://github.com/postalsys/mailauth/issues/58 ↩︎

  31. https://github.com/postalsys/mailauth/issues/48 ↩︎

  32. https://github.com/postalsys/mailauth/issues/74 ↩︎

  33. https://github.com/postalsys/mailauth/issues/75 ↩︎

  34. https://github.com/postalsys/mailauth/issues/60 ↩︎

  35. https://github.com/postalsys/mailauth/issues/73 ↩︎

  36. อิงจากปัญหา GitHub ในที่เก็บ Upptime ↩︎

  37. อิงจากปัญหา GitHub ในที่เก็บ Upptime ↩︎

  38. อิงจากปัญหา GitHub ในที่เก็บ Upptime ↩︎

  39. อิงจากคำขอดึง GitHub ไปยัง Upptime ↩︎

  40. อิงจากคำขอดึง GitHub ไปยัง Upptime ↩︎