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

คำนำ
ในโลกของ จาวาสคริปต์ และ Node.js แพ็กเกจบางรายการมีความสำคัญอย่างยิ่งยวด มียอดดาวน์โหลดหลายล้านครั้งต่อวัน และขับเคลื่อนแอปพลิเคชันทั่วโลก เบื้องหลังเครื่องมือเหล่านี้คือนักพัฒนาที่มุ่งเน้นคุณภาพโอเพนซอร์ส วันนี้ เราจะมาแสดงให้เห็นว่าทีมงานของเราช่วยสร้างและดูแลรักษาแพ็กเกจ npm ซึ่งกลายเป็นส่วนสำคัญของระบบนิเวศ JavaScript ได้อย่างไร
ผู้บุกเบิกที่ไว้วางใจเรา: Isaac Z. Schlueter และส่งต่ออีเมล
เราภูมิใจที่ได้ ไอแซค ซี. ชลูเตอร์ (GitHub: ไอแซ็กส์) เป็นผู้ใช้ Isaac ได้สร้าง เอ็นพีเอ็ม และช่วยสร้าง Node.js ความไว้วางใจที่เขามีต่อ Forward Email แสดงให้เห็นถึงความมุ่งมั่นของเราในด้านคุณภาพและความปลอดภัย Isaac ใช้ Forward Email กับหลายโดเมน รวมถึง izs.me
อิทธิพลของไอแซคที่มีต่อ JavaScript นั้นมหาศาล ในปี 2009 เขาเป็นหนึ่งในคนกลุ่มแรกๆ ที่มองเห็นศักยภาพของ Node.js โดยทำงานร่วมกับ ไรอัน ดาห์ล ซึ่งเป็นผู้สร้างแพลตฟอร์มนี้ ดังที่ไอแซคกล่าวไว้ใน สัมภาษณ์กับนิตยสาร Increment ว่า "ท่ามกลางชุมชนเล็กๆ ที่เต็มไปด้วยผู้คนมากมายที่พยายามหาวิธีทำให้ JS ฝั่งเซิร์ฟเวอร์เกิดขึ้นได้ ไรอัน ดาห์ล ได้คิดค้น Node ขึ้นมา ซึ่งเห็นได้ชัดว่าเป็นแนวทางที่ถูกต้อง ผมจึงทุ่มเทอย่างเต็มที่และมีส่วนร่วมอย่างมากในช่วงกลางปี 2009"
Note
สำหรับผู้ที่สนใจประวัติความเป็นมาของ Node.js มีสารคดีดีๆ มากมายที่บันทึกเรื่องราวการพัฒนาของ Node.js ไว้ รวมถึง เรื่องราวของ Node.js และ 10 สิ่งที่ฉันเสียใจเกี่ยวกับ Node.js - Ryan Dahl เว็บไซต์ส่วนตัว ของ Ryan Dahl ยังมีข้อมูลเชิงลึกอันมีค่าเกี่ยวกับผลงานของเขาอีกด้วย
จากการสร้าง npm สู่ความเป็นผู้นำของ Node.js
ไอแซคสร้าง npm ขึ้นในเดือนกันยายน 2009 โดยมีเวอร์ชันที่ใช้งานได้รุ่นแรกเปิดตัวในต้นปี 2010 ตัวจัดการแพ็กเกจนี้ตอบโจทย์ความต้องการหลักของ Node.js ช่วยให้นักพัฒนาสามารถแบ่งปันและนำโค้ดกลับมาใช้ใหม่ได้อย่างง่ายดาย อ้างอิงจาก หน้าวิกิพีเดียของ Node.js ว่า "ในเดือนมกราคม 2010 ได้มีการเปิดตัวตัวจัดการแพ็กเกจสำหรับสภาพแวดล้อม Node.js ที่เรียกว่า npm ตัวจัดการแพ็กเกจนี้ช่วยให้โปรแกรมเมอร์สามารถเผยแพร่และแชร์แพ็กเกจ Node.js พร้อมกับซอร์สโค้ดที่เกี่ยวข้อง และได้รับการออกแบบมาเพื่อให้การติดตั้ง อัปเดต และถอนการติดตั้งแพ็กเกจง่ายขึ้น"
เมื่อไรอัน ดาห์ล ก้าวลงจาก Node.js ในเดือนมกราคม 2012 ไอแซคก็เข้ามารับตำแหน่งหัวหน้าโครงการ ดังที่ระบุไว้ใน บทสรุปของเขา เขา "เป็นผู้นำการพัฒนา API หลักของ Node.js หลายตัว รวมถึงระบบโมดูล CommonJS, API ระบบไฟล์ และสตรีม" และ "ทำหน้าที่เป็น BDFL (Benevolent Dictator For Life) ของโครงการเป็นเวลา 2 ปี เพื่อให้มั่นใจว่ากระบวนการสร้าง Node.js เวอร์ชัน 0.6 ถึง 0.10 มีคุณภาพและเชื่อถือได้มากขึ้นเรื่อยๆ"
ไอแซคได้นำพา Node.js ผ่านช่วงเวลาสำคัญของการเติบโต โดยกำหนดมาตรฐานที่ยังคงกำหนดแพลตฟอร์มมาจนถึงทุกวันนี้ ต่อมาในปี 2014 เขาได้ก่อตั้ง npm, Inc. เพื่อรองรับ npm registry ซึ่งเขาเคยบริหารจัดการเองมาก่อน
เราขอขอบคุณไอแซคสำหรับการมีส่วนร่วมอันยิ่งใหญ่ของเขาใน JavaScript และยังคงใช้แพ็คเกจมากมายที่เขาสร้างขึ้น ผลงานของเขาได้เปลี่ยนแปลงวิธีการสร้างซอฟต์แวร์ของเรา และวิธีที่นักพัฒนาหลายล้านคนแบ่งปันโค้ดทั่วโลก
สถาปนิกเบื้องหลังโค้ด: การเดินทางของ Nick Baugh
หัวใจสำคัญของความสำเร็จด้านโอเพนซอร์สของเราคือ นิค บอห์ ผู้ก่อตั้งและเจ้าของ Forward Email ผลงานด้าน JavaScript ของเขาครอบคลุมเกือบ 20 ปี และได้หล่อหลอมแนวทางการพัฒนาแอปพลิเคชันของนักพัฒนานับไม่ถ้วน เส้นทางสู่โอเพนซอร์สของเขาแสดงให้เห็นถึงทั้งทักษะทางเทคนิคและความเป็นผู้นำในชุมชน
คณะกรรมการเทคนิคด่วนและการสนับสนุนหลัก
ความเชี่ยวชาญด้านเฟรมเวิร์กเว็บของ Nick ทำให้เขาได้รับเลือกให้อยู่ใน คณะกรรมการเทคนิคเอ็กซ์เพรส ซึ่งเขาได้ช่วยพัฒนาเฟรมเวิร์ก Node.js ที่มีการใช้งานมากที่สุดตัวหนึ่ง ปัจจุบัน Nick เป็นสมาชิกที่ไม่ได้ใช้งานใน หน้าชุมชนเอ็กซ์เพรส
Important
Express สร้างขึ้นครั้งแรกโดย TJ Holowaychuk ผู้สนับสนุนโอเพนซอร์สผู้มากผลงานและมีส่วนสำคัญในระบบนิเวศ Node.js เราขอขอบคุณ TJ สำหรับผลงานอันเป็นรากฐาน และเคารพ การตัดสินใจหยุดพัก ของเขาจากผลงานโอเพนซอร์สอันมากมายของเขา
ในฐานะสมาชิกของ คณะกรรมการเทคนิคเอ็กซ์เพรส นิคได้แสดงความใส่ใจอย่างมากต่อรายละเอียดในประเด็นต่างๆ เช่น การชี้แจงเอกสาร req.originalUrl
และการแก้ไขปัญหาการจัดการแบบฟอร์มหลายส่วน
การสนับสนุน Koa Framework
ผลงานของ Nick กับ เฟรมเวิร์ก Koa ซึ่งเป็นทางเลือกที่ทันสมัยและเบากว่า Express ที่สร้างโดย TJ Holowaychuk เช่นกัน แสดงให้เห็นถึงความมุ่งมั่นของเขาในการพัฒนาเครื่องมือพัฒนาเว็บให้ดียิ่งขึ้น ผลงาน Koa ของเขาครอบคลุมทั้งปัญหาและโค้ดผ่าน Pull Request การจัดการข้อผิดพลาด การจัดการประเภทเนื้อหา และการปรับปรุงเอกสารประกอบ
ผลงานของเขาทั้งในด้าน Express และ Koa ช่วยให้เขามีมุมมองที่เป็นเอกลักษณ์เกี่ยวกับการพัฒนาเว็บ Node.js และช่วยให้ทีมของเราสร้างแพ็คเกจที่ทำงานได้ดีกับระบบนิเวศเฟรมเวิร์กหลายตัว
จากผู้มีส่วนสนับสนุนรายบุคคลสู่ผู้นำองค์กร
สิ่งที่เริ่มต้นจากการช่วยเหลือโครงการที่มีอยู่เดิม ได้เติบโตเป็นการสร้างและดูแลรักษาระบบนิเวศแบบองค์รวม นิคได้ก่อตั้งองค์กร GitHub หลายแห่ง รวมถึง ห้องโดยสาร, เครื่องสแกนสแปม, ส่งต่ออีเมล์, หนุ่มน้อย และ บรี ซึ่งแต่ละแห่งก็ตอบโจทย์ความต้องการเฉพาะเจาะจงในชุมชน JavaScript
การเปลี่ยนจากผู้มีส่วนร่วมมาเป็นผู้นำนี้แสดงให้เห็นถึงวิสัยทัศน์ของนิคในการสร้างซอฟต์แวร์ที่ออกแบบมาอย่างดีซึ่งสามารถแก้ไขปัญหาที่แท้จริงได้ ด้วยการจัดระเบียบแพ็กเกจที่เกี่ยวข้องภายใต้องค์กร GitHub เฉพาะด้าน เขาได้สร้างระบบนิเวศเครื่องมือที่ทำงานร่วมกัน ในขณะเดียวกันก็ยังคงความยืดหยุ่นและโมดูลาร์ไว้เพื่อชุมชนนักพัฒนาที่กว้างขึ้น
องค์กร GitHub ของเรา: ระบบนิเวศแห่งนวัตกรรม
เราจัดระเบียบงานโอเพนซอร์สของเราโดยมุ่งเน้นไปที่องค์กร GitHub เป็นหลัก โดยแต่ละองค์กรจะตอบสนองความต้องการเฉพาะด้าน JavaScript โครงสร้างนี้สร้างกลุ่มแพ็กเกจที่เชื่อมโยงกัน ซึ่งทำงานร่วมกันได้ดีในขณะที่ยังคงความเป็นโมดูลาร์
Cabin: การบันทึกข้อมูลแบบมีโครงสร้างสำหรับแอปพลิเคชันสมัยใหม่
การจัดระเบียบห้องโดยสาร คือระบบบันทึกข้อมูลแอปที่เรียบง่ายแต่ทรงพลังในแบบฉบับของเรา แพ็กเกจหลัก cabin
มีดาวบน GitHub เกือบ 900 ดวง และมียอดดาวน์โหลดรายสัปดาห์มากกว่า 100,000 ครั้ง Cabin มีโครงสร้างการบันทึกข้อมูลที่ทำงานร่วมกับบริการยอดนิยมอย่าง Sentry, LogDNA และ Papertrail
สิ่งที่ทำให้ Cabin พิเศษคือระบบ API และปลั๊กอินที่ใส่ใจ แพ็คเกจที่รองรับ เช่น axe
สำหรับมิดเดิลแวร์ Express และ parse-request
สำหรับการแยกวิเคราะห์คำขอ HTTP แสดงให้เห็นถึงความมุ่งมั่นของเราในการแก้ปัญหาอย่างครบวงจร แทนที่จะใช้เครื่องมือแบบแยกส่วน
แพ็กเกจ bson-objectid
สมควรได้รับการกล่าวถึงเป็นพิเศษ ด้วยยอดดาวน์โหลดกว่า 1.7 ล้านครั้งภายในเวลาเพียงสองเดือน[1] การใช้งาน MongoDB ObjectID แบบเบาๆ นี้ได้กลายเป็นตัวเลือกยอดนิยมสำหรับนักพัฒนาที่ต้องการ ID โดยไม่ต้องพึ่งพา MongoDB เต็มรูปแบบ
เครื่องสแกนสแปม: ต่อสู้กับการละเมิดอีเมล
องค์กรเครื่องสแกนสแปม แสดงให้เห็นถึงความมุ่งมั่นของเราในการแก้ไขปัญหาจริง แพ็กเกจหลัก spamscanner
มีการตรวจจับสแปมอีเมลขั้นสูง แต่แพ็กเกจ url-regex-safe
กลับได้รับการนำไปใช้งานอย่างน่าทึ่ง
ด้วยยอดดาวน์โหลดกว่า 1.2 ล้านครั้งภายในสองเดือน[2] url-regex-safe
ได้แก้ไขปัญหาความปลอดภัยที่สำคัญในนิพจน์ทั่วไปสำหรับการตรวจจับ URL อื่นๆ แพ็กเกจนี้แสดงให้เห็นถึงแนวทางของเราในการโอเพนซอร์ส: การค้นหาปัญหาที่พบบ่อย (ในกรณีนี้คือช่องโหว่ ทำซ้ำ ในการตรวจสอบ URL) การสร้างโซลูชันที่น่าเชื่อถือ และการดูแลรักษาอย่างระมัดระวัง
Bree: การกำหนดตารางงานสมัยใหม่ด้วยเธรดเวิร์กเกอร์
องค์กรบรี คือคำตอบสำหรับความท้าทายที่พบบ่อยใน Node.js นั่นคือการจัดตารางงานที่เชื่อถือได้ แพ็กเกจหลัก bree
ซึ่งมีดาวบน GitHub มากกว่า 3,100 ดวง มอบตัวจัดตารางงานที่ทันสมัยโดยใช้เธรดเวิร์กเกอร์ของ Node.js เพื่อประสิทธิภาพและความน่าเชื่อถือที่ดีขึ้น
Note
Bree ถูกสร้างขึ้นหลังจากที่เราช่วยดูแล กำหนดการ โดยนำบทเรียนที่ได้เรียนรู้มาปรับใช้เพื่อสร้างระบบจัดตารางงานที่ดีขึ้น การมีส่วนร่วมของเราใน Agenda ช่วยให้เราค้นพบวิธีปรับปรุงการจัดตารางงาน
สิ่งที่ทำให้ Bree แตกต่างจากเครื่องมือจัดตารางงานอื่น ๆ เช่น Agenda:
- ไม่มีการอ้างอิงภายนอก: ต่างจาก Agenda ที่ต้องใช้ MongoDB, Bree ไม่จำเป็นต้องใช้ Redis หรือ MongoDB ในการจัดการสถานะงาน
- เธรดงาน: Bree ใช้เธรดงาน Node.js สำหรับกระบวนการแซนด์บ็อกซ์ ช่วยให้แยกส่วนและเพิ่มประสิทธิภาพการทำงานได้ดีขึ้น
- API ที่เรียบง่าย: Bree มอบการควบคุมที่ละเอียดและเรียบง่าย ทำให้ง่ายต่อการปรับใช้ความต้องการในการจัดตารางเวลาที่ซับซ้อน
- การสนับสนุนในตัว: สิ่งต่างๆ เช่น การโหลดซ้ำที่ราบรื่น งาน cron วันที่ และเวลาที่ผู้ใช้สามารถเข้าถึงได้ จะถูกรวมไว้เป็นค่าเริ่มต้น
Bree เป็นส่วนสำคัญของ forwardemail.net ซึ่งทำหน้าที่จัดการงานเบื้องหลังที่สำคัญ เช่น การประมวลผลอีเมล การล้างข้อมูล และการบำรุงรักษาตามกำหนดเวลา การใช้ Bree ใน Forward Email แสดงให้เห็นถึงความมุ่งมั่นของเราในการใช้เครื่องมือของเราเองในการผลิต เพื่อให้มั่นใจว่าเครื่องมือเหล่านั้นเป็นไปตามมาตรฐานความน่าเชื่อถือสูง
เรายังใช้และชื่นชมแพ็กเกจ worker thread ที่ยอดเยี่ยมอื่นๆ เช่น สระน้ำ และ HTTP client เช่น สิบเอ็ด Piscina เช่นเดียวกับ Bree ใช้ worker thread ของ Node.js เพื่อการประมวลผลงานอย่างมีประสิทธิภาพ เราขอขอบคุณ แมทธิว ฮิลล์ ผู้ดูแลทั้ง undici และ piscina สำหรับการมีส่วนร่วมที่สำคัญใน Node.js Matteo ดำรงตำแหน่งในคณะกรรมการกำกับดูแลด้านเทคนิคของ Node.js และได้พัฒนาความสามารถของ HTTP client ใน Node.js อย่างมาก
ส่งต่ออีเมล: โครงสร้างพื้นฐานอีเมลโอเพนซอร์ส
โครงการที่ท้าทายที่สุดของเราคือ ส่งต่ออีเมล์ ซึ่งเป็นบริการอีเมลโอเพนซอร์สที่ให้บริการส่งต่ออีเมล จัดเก็บ และ API คลังเก็บหลักมีดาวบน GitHub มากกว่า 1,100 ดวง[3] ซึ่งแสดงให้เห็นถึงความชื่นชมจากชุมชนที่มีต่อทางเลือกใหม่นี้แทนบริการอีเมลแบบมีกรรมสิทธิ์
แพ็กเกจ preview-email
จากองค์กรนี้ ซึ่งมียอดดาวน์โหลดมากกว่า 2.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
หนังสือเดินทาง: การตรวจสอบสิทธิ์สำหรับ Lad
@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: การตรวจสอบ Uptime โอเพนซอร์ส
องค์กรอัปไทม์ แสดงให้เห็นถึงความมุ่งมั่นของเราในการตรวจสอบโอเพนซอร์สอย่างโปร่งใส คลังเก็บ 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 เราไม่ได้แค่แก้ไขเฉพาะจุดนั้น แต่เรายังปรับปรุงแพ็กเกจพื้นฐานให้ดีขึ้น ซึ่งเป็นประโยชน์ต่อทั้งบริการของเราและชุมชนโดยรวม
แนวทางนี้ทำให้เกิดการปรับปรุงมากมาย:
- การปิดระบบอย่างราบรื่นของ Bree: ความจำเป็นของอีเมลส่งต่อที่ต้องใช้งานแบบไม่ต้องหยุดทำงาน นำไปสู่ความสามารถในการปิดระบบอย่างราบรื่นที่ดีขึ้นใน Bree
- การจดจำรูปแบบของ Spam Scanner: รูปแบบสแปมที่พบในการใช้งานจริงในอีเมลส่งต่อได้ส่งผลต่ออัลกอริทึมการตรวจจับของ Spam Scanner
- การเพิ่มประสิทธิภาพประสิทธิภาพของ Cabin: การบันทึกข้อมูลปริมาณมากในระบบจริงเผยให้เห็นโอกาสในการเพิ่มประสิทธิภาพใน Cabin ซึ่งเป็นประโยชน์ต่อผู้ใช้ทุกคน
โดยการรักษาวงจรอันดีงามระหว่างการทำงานโอเพ่นซอร์สและบริการการผลิตของเรา เราจึงมั่นใจได้ว่าแพ็คเกจของเรายังคงเป็นโซลูชันที่ใช้งานได้จริงและผ่านการทดสอบภาคสนามแล้ว มากกว่าจะเป็นการนำไปใช้งานตามทฤษฎี
หลักการสำคัญของการส่งต่ออีเมล ##: รากฐานสู่ความเป็นเลิศ
อีเมลส่งต่อได้รับการออกแบบตามหลักการสำคัญชุดหนึ่งที่เป็นแนวทางในการตัดสินใจพัฒนาทั้งหมดของเรา หลักการเหล่านี้มีรายละเอียดอยู่ใน เว็บไซต์ ของเรา เพื่อให้แน่ใจว่าบริการของเรายังคงเป็นมิตรต่อนักพัฒนา ปลอดภัย และให้ความสำคัญกับความเป็นส่วนตัวของผู้ใช้
เป็นมิตรกับนักพัฒนาเสมอ เน้นความปลอดภัย และโปร่งใส
หลักการสำคัญอันดับแรกของเราคือการสร้างซอฟต์แวร์ที่เป็นมิตรกับนักพัฒนา ควบคู่ไปกับการรักษามาตรฐานความปลอดภัยและความเป็นส่วนตัวสูงสุด เราเชื่อว่าความเป็นเลิศทางเทคนิคไม่ควรแลกมาด้วยความสามารถในการใช้งาน และความโปร่งใสจะสร้างความไว้วางใจให้กับชุมชนของเรา
หลักการนี้ปรากฏในเอกสารประกอบโดยละเอียดของเรา ข้อความแสดงข้อผิดพลาดที่ชัดเจน และการสื่อสารอย่างเปิดเผยเกี่ยวกับทั้งความสำเร็จและความท้าทาย การทำให้ฐานโค้ดทั้งหมดของเราเป็นโอเพนซอร์ส เปิดโอกาสให้มีการตรวจสอบและทำงานร่วมกัน ซึ่งจะช่วยเสริมสร้างความแข็งแกร่งให้กับทั้งซอฟต์แวร์ของเราและระบบนิเวศโดยรวม
การยึดมั่นในหลักการพัฒนาซอฟต์แวร์ที่ได้รับการพิสูจน์แล้ว
เราปฏิบัติตามหลักการพัฒนาซอฟต์แวร์ที่ได้รับการยอมรับหลายประการซึ่งได้รับการพิสูจน์คุณค่ามาแล้วหลายทศวรรษ:
- MVC: การแยกข้อกังวลผ่านรูปแบบ Model-View-Controller
- ปรัชญายูนิกซ์: การสร้างส่วนประกอบแบบโมดูลาร์ที่ทำหน้าที่เดียวได้อย่างมีประสิทธิภาพ
- KISS: การรักษาความเรียบง่ายและตรงไปตรงมา
- DRY: อย่าทำซ้ำ ส่งเสริมการนำโค้ดกลับมาใช้ใหม่
- YAGNI: คุณไม่จำเป็นต้องใช้มัน หลีกเลี่ยงการเพิ่มประสิทธิภาพก่อนกำหนด
- สิบสองปัจจัย: ปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการสร้างแอปพลิเคชันที่ทันสมัยและปรับขนาดได้
- มีดโกนของอ็อกแคม: เลือกโซลูชันที่ง่ายที่สุดที่ตรงตามข้อกำหนด
- การทดลองใช้อาหารสุนัข: การใช้ผลิตภัณฑ์ของเราเองอย่างกว้างขวาง
หลักการเหล่านี้ไม่ได้เป็นเพียงแนวคิดเชิงทฤษฎีเท่านั้น แต่ยังฝังแน่นอยู่ในแนวทางการพัฒนาของเราในแต่ละวันอีกด้วย ยกตัวอย่างเช่น การยึดมั่นในปรัชญา Unix ของเรานั้นเห็นได้ชัดจากวิธีการที่เราสร้างแพ็กเกจ npm ของเรา ซึ่งเป็นโมดูลขนาดเล็กที่มุ่งเน้นเฉพาะด้าน ซึ่งสามารถนำมารวมกันเพื่อแก้ปัญหาที่ซับซ้อนได้
กำหนดเป้าหมายนักพัฒนาที่ไม่ค่อยเก่งแต่ใช้ Bootstrapped
เรามุ่งเป้าไปที่นักพัฒนาที่ขาดความคิดสร้างสรรค์ นักพัฒนาที่เริ่มต้นจากพื้นฐาน และนักพัฒนาที่เน้น ราเมนทำกำไร โดยเฉพาะ การมุ่งเน้นนี้กำหนดทุกอย่างตั้งแต่รูปแบบการกำหนดราคาไปจนถึงการตัดสินใจทางเทคนิคของเรา เราเข้าใจความท้าทายในการสร้างผลิตภัณฑ์ด้วยทรัพยากรที่จำกัด เพราะเราเคยผ่านประสบการณ์ตรงมาแล้ว
หลักการนี้มีความสำคัญอย่างยิ่งต่อแนวทางการดำเนินงานโอเพนซอร์สของเรา เราสร้างและดูแลรักษาแพ็กเกจที่แก้ไขปัญหาจริงสำหรับนักพัฒนาที่ไม่มีงบประมาณระดับองค์กร ทำให้ทุกคนสามารถเข้าถึงเครื่องมืออันทรงพลังได้โดยไม่คำนึงถึงทรัพยากร
หลักการ ### ในการปฏิบัติ: ฐานรหัสการส่งต่ออีเมล
หลักการเหล่านี้ปรากฏชัดเจนในฐานโค้ด Forward Email ไฟล์ package.json ของเราเผยให้เห็นการเลือกใช้ dependencies อย่างรอบคอบ โดยแต่ละส่วนได้รับการคัดเลือกให้สอดคล้องกับค่านิยมหลักของเรา:
- แพ็กเกจที่เน้นความปลอดภัย เช่น
mailauth
สำหรับการตรวจสอบสิทธิ์อีเมล - เครื่องมือที่ใช้งานง่ายสำหรับนักพัฒนา เช่น
preview-email
เพื่อการดีบักที่ง่ายขึ้น - ส่วนประกอบแบบโมดูลาร์ เช่น ยูทิลิตี้
p-*
ต่างๆ จาก Sindre Sorhus
ด้วยการปฏิบัติตามหลักการเหล่านี้อย่างสม่ำเสมอตลอดเวลา เราจึงได้สร้างบริการที่นักพัฒนาสามารถไว้วางใจในโครงสร้างพื้นฐานอีเมลของตนเองได้ ปลอดภัย เชื่อถือได้ และสอดคล้องกับค่านิยมของชุมชนโอเพ่นซอร์ส
ความเป็นส่วนตัวโดยการออกแบบ
ความเป็นส่วนตัวไม่ใช่สิ่งที่คิดขึ้นภายหลังหรือคุณลักษณะทางการตลาดสำหรับการส่งต่ออีเมล แต่เป็นหลักการออกแบบพื้นฐานที่แจ้งให้ทราบทุกแง่มุมของบริการและโค้ดของเรา:
- การเข้ารหัสแบบ Zero-Access: เราได้นำระบบที่ทำให้เราไม่สามารถอ่านอีเมลของผู้ใช้ได้ในทางเทคนิค
- การรวบรวมข้อมูลขั้นต่ำ: เราเก็บรวบรวมเฉพาะข้อมูลที่จำเป็นต่อการให้บริการเท่านั้น ไม่มีอะไรเพิ่มเติม
- นโยบายที่โปร่งใส: นโยบายความเป็นส่วนตัวของเราเขียนด้วยภาษาที่ชัดเจน เข้าใจง่าย ปราศจากศัพท์เฉพาะทางกฎหมาย
- การตรวจสอบโอเพนซอร์ส: ฐานโค้ดโอเพนซอร์สของเราช่วยให้นักวิจัยด้านความปลอดภัยสามารถตรวจสอบข้อเรียกร้องความเป็นส่วนตัวของเราได้
ความมุ่งมั่นนี้ขยายไปถึงแพ็คเกจโอเพ่นซอร์สของเรา ซึ่งได้รับการออกแบบโดยคำนึงถึงแนวปฏิบัติที่ดีที่สุดด้านความปลอดภัยและความเป็นส่วนตัวตั้งแต่พื้นฐาน
โอเพ่นซอร์สที่ยั่งยืน
เราเชื่อว่าซอฟต์แวร์โอเพนซอร์สจำเป็นต้องมีรูปแบบที่ยั่งยืนเพื่อการเติบโตในระยะยาว แนวทางของเราประกอบด้วย:
- การสนับสนุนเชิงพาณิชย์: นำเสนอการสนับสนุนและบริการระดับพรีเมียมสำหรับเครื่องมือโอเพนซอร์สของเรา
- การให้สิทธิ์ใช้งานแบบสมดุล: การใช้สิทธิ์ใช้งานที่ปกป้องทั้งเสรีภาพของผู้ใช้และความยั่งยืนของโครงการ
- การมีส่วนร่วมของชุมชน: การมีส่วนร่วมอย่างแข็งขันกับผู้สนับสนุนเพื่อสร้างชุมชนที่ให้การสนับสนุน
- แผนงานที่โปร่งใส: การแบ่งปันแผนการพัฒนาของเราเพื่อให้ผู้ใช้สามารถวางแผนได้อย่างเหมาะสม
ด้วยการมุ่งเน้นที่ความยั่งยืน เราจึงมั่นใจได้ว่าการสนับสนุนโอเพนซอร์สของเราจะสามารถเติบโตและปรับปรุงอย่างต่อเนื่องตามเวลาแทนที่จะถูกละเลย
ตัวเลขไม่โกหก: สถิติการดาวน์โหลด npm ที่น่าตกตะลึงของเรา
เมื่อเราพูดถึงผลกระทบของซอฟต์แวร์โอเพนซอร์ส สถิติการดาวน์โหลดถือเป็นตัวชี้วัดที่ชัดเจนถึงการใช้งานและความน่าเชื่อถือ แพ็กเกจจำนวนมากที่เราช่วยดูแลนั้นมีขนาดที่โครงการโอเพนซอร์สเพียงไม่กี่โครงการเท่านั้นที่ทำได้ โดยมียอดดาวน์โหลดรวมกันหลายพันล้านครั้ง
Important
แม้ว่าเราจะภูมิใจที่ได้ช่วยดูแลรักษาแพ็กเกจที่มียอดดาวน์โหลดสูงหลายรายการในระบบนิเวศ JavaScript แต่เราต้องยอมรับว่าแพ็กเกจเหล่านี้หลายรายการถูกสร้างขึ้นโดยนักพัฒนาที่มีความสามารถท่านอื่นๆ แพ็กเกจอย่าง superagent และ supertest เดิมทีถูกสร้างขึ้นโดย TJ Holowaychuk ซึ่งมีส่วนร่วมอย่างล้นหลามในโอเพนซอร์สและมีบทบาทสำคัญในการกำหนดระบบนิเวศ Node.js
มุมมองภาพรวมของผลกระทบของเรา
ในช่วงระยะเวลาเพียงสองเดือนตั้งแต่เดือนกุมภาพันธ์ถึงมีนาคม พ.ศ. 2568 แพ็คเกจยอดนิยมที่เราสนับสนุนและช่วยรักษาจำนวนการดาวน์โหลดที่น่าทึ่งที่บันทึกไว้:
- ซุปเปอร์เอเจนต์: ดาวน์โหลด 84,575,829 ครั้ง[4] (สร้างโดย TJ Holowaychuk)
- ซูเปอร์เทสต์: ดาวน์โหลด 76,432,591 ครั้ง[5] (สร้างโดย TJ Holowaychuk)
- อีกด้วย: ดาวน์โหลด 28,539,295 ครั้ง[6] (สร้างโดย TJ Holowaychuk)
- @koa/เราเตอร์: ดาวน์โหลด 11,007,327 ครั้ง[7]
- เราเตอร์โคอา: ดาวน์โหลด 3,498,918 ครั้ง[8]
- url-regex: ดาวน์โหลด 2,819,520 ครั้ง[9]
- อีเมลตัวอย่าง: ดาวน์โหลด 2,500,000 ครั้ง[10]
- ห้องโดยสาร: ดาวน์โหลด 1,800,000 ครั้ง[11]
- @breejs/ภายหลัง: ดาวน์โหลด 1,709,938 ครั้ง[12]
- เทมเพลตอีเมล: ดาวน์โหลด 1,128,139 ครั้ง[13]
- __PROTECTED_LINK_259__0: ดาวน์โหลด 1,124,686 ครั้ง[14]
- __PROTECTED_LINK_259__1: ดาวน์โหลด 1,200,000 ครั้ง[15]
- __PROTECTED_LINK_259__2: ดาวน์โหลด 894,666 ครั้ง[16]
- __PROTECTED_LINK_259__3: ดาวน์โหลด 839,585 ครั้ง[17]
- __PROTECTED_LINK_259__4: ดาวน์โหลด 145,000 ครั้ง[18]
- __PROTECTED_LINK_259__5: ดาวน์โหลด 24,270 ครั้ง[19]
Note
แพ็กเกจอื่นๆ อีกหลายแพ็กเกจที่เราช่วยดูแลแต่ไม่ได้สร้างขึ้นกลับมียอดดาวน์โหลดสูงกว่านี้ ได้แก่ form-data
(ดาวน์โหลดมากกว่า 738 ล้านครั้ง), toidentifier
(ดาวน์โหลดมากกว่า 309 ล้านครั้ง), stackframe
(ดาวน์โหลดมากกว่า 116 ล้านครั้ง) และ error-stack-parser
(ดาวน์โหลดมากกว่า 113 ล้านครั้ง) เรารู้สึกเป็นเกียรติอย่างยิ่งที่ได้มีส่วนร่วมในแพ็กเกจเหล่านี้ โดยยังคงเคารพในผลงานของผู้เขียนดั้งเดิม
นี่ไม่ใช่แค่ตัวเลขที่น่าประทับใจเท่านั้น แต่ยังเป็นตัวแทนของนักพัฒนาตัวจริงที่แก้ปัญหาจริง ๆ ด้วยโค้ดที่เราช่วยดูแลรักษา การดาวน์โหลดแต่ละครั้งเปรียบเสมือนตัวอย่างที่แพ็กเกจเหล่านี้ได้ช่วยให้ใครบางคนสร้างสิ่งที่มีความหมาย ตั้งแต่โปรเจกต์สำหรับมือสมัครเล่นไปจนถึงแอปพลิเคชันระดับองค์กรที่มีผู้ใช้งานหลายล้านคน
ผลกระทบรายวันในระดับ
รูปแบบการดาวน์โหลดรายวันเผยให้เห็นการใช้งานที่สม่ำเสมอและมีปริมาณสูง โดยมียอดดาวน์โหลดสูงสุดอยู่ที่หลายล้านครั้งต่อวัน[20] ความสม่ำเสมอนี้บ่งบอกถึงความเสถียรและความน่าเชื่อถือของแพ็กเกจเหล่านี้ นักพัฒนาไม่ได้แค่ทดลองใช้เท่านั้น แต่ยังผสานรวมเข้ากับเวิร์กโฟลว์หลักและพึ่งพาแพ็กเกจเหล่านี้ทุกวันอีกด้วย
รูปแบบการดาวน์โหลดรายสัปดาห์แสดงให้เห็นตัวเลขที่น่าประทับใจยิ่งขึ้น โดยอยู่ที่ประมาณหลายสิบล้านครั้งต่อสัปดาห์อย่างสม่ำเสมอ[21] นี่แสดงถึงผลกระทบมหาศาลในระบบนิเวศ JavaScript โดยที่แพ็กเกจเหล่านี้ทำงานในสภาพแวดล้อมการใช้งานจริงทั่วโลก
เหนือกว่าตัวเลขดิบ
แม้ว่าสถิติการดาวน์โหลดจะน่าประทับใจอยู่แล้ว แต่ก็สะท้อนถึงความไว้วางใจที่ชุมชนมีต่อแพ็คเกจเหล่านี้ได้อย่างลึกซึ้งกว่านั้น การดูแลรักษาแพ็คเกจในระดับนี้ต้องอาศัยความมุ่งมั่นอย่างแน่วแน่ที่จะ:
- ความเข้ากันได้ย้อนหลัง: การเปลี่ยนแปลงต้องได้รับการพิจารณาอย่างรอบคอบเพื่อหลีกเลี่ยงการขัดข้องของการใช้งานที่มีอยู่
- ความปลอดภัย: เนื่องจากมีแอปพลิเคชันหลายล้านตัวที่ต้องพึ่งพาแพ็กเกจเหล่านี้ ช่องโหว่ด้านความปลอดภัยอาจส่งผลกระทบในวงกว้าง
- ประสิทธิภาพ: ในระดับนี้ การปรับปรุงประสิทธิภาพเพียงเล็กน้อยก็สามารถสร้างประโยชน์โดยรวมได้อย่างมาก
- เอกสารประกอบ: เอกสารประกอบที่ชัดเจนและครอบคลุมเป็นสิ่งจำเป็นสำหรับแพ็กเกจที่นักพัฒนาทุกระดับประสบการณ์ใช้งาน
การเติบโตที่สม่ำเสมอของจำนวนการดาวน์โหลดในช่วงเวลาต่างๆ สะท้อนให้เห็นถึงความสำเร็จในการบรรลุพันธสัญญาเหล่านี้ รวมถึงการสร้างความไว้วางใจกับชุมชนนักพัฒนาผ่านแพ็คเกจที่เชื่อถือได้และได้รับการดูแลอย่างดี
การสนับสนุนระบบนิเวศ: การสนับสนุนโอเพนซอร์สของเรา
Tip
ความยั่งยืนของโอเพนซอร์สไม่ได้หมายถึงแค่การมีส่วนร่วมในโค้ดเท่านั้น แต่ยังรวมถึงการสนับสนุนนักพัฒนาที่ดูแลรักษาโครงสร้างพื้นฐานที่สำคัญด้วย
นอกเหนือจากการมีส่วนร่วมโดยตรงของเราต่อระบบนิเวศ JavaScript แล้ว เรายังภูมิใจที่ได้สนับสนุนผู้สนับสนุน Node.js ที่มีชื่อเสียง ซึ่งผลงานของพวกเขาเป็นรากฐานของแอปพลิเคชันสมัยใหม่มากมาย การสนับสนุนของเราประกอบด้วย:
Andris Reinman: ผู้บุกเบิกโครงสร้างพื้นฐานอีเมล
แอนดริส เรนแมน คือผู้สร้าง โหนดเมเลอร์ ซึ่งเป็นไลบรารีการส่งอีเมลยอดนิยมสำหรับ Node.js โดยมียอดดาวน์โหลดมากกว่า 14 ล้านครั้งต่อสัปดาห์ ผลงานของเขายังครอบคลุมไปถึงส่วนประกอบโครงสร้างพื้นฐานอีเมลที่สำคัญอื่นๆ เช่น เซิร์ฟเวอร์ SMTP, เมลพาร์เซอร์ และ ไวลด์ดั๊ก
การสนับสนุนของเราช่วยให้แน่ใจถึงการบำรุงรักษาและการพัฒนาอย่างต่อเนื่องของเครื่องมือที่จำเป็นเหล่านี้ซึ่งขับเคลื่อนการสื่อสารทางอีเมลสำหรับแอปพลิเคชัน Node.js มากมาย รวมถึงบริการ Forward Email ของเราเอง
Sindre Sorhus: ผู้บงการแพ็คเกจยูทิลิตี้
ซินเดร ซอร์ฮุส เป็นหนึ่งในนักพัฒนาโอเพนซอร์สที่มีผลงานมากที่สุดในระบบนิเวศ JavaScript โดยมีแพ็กเกจ npm มากกว่า 1,000 รายการ ยูทิลิตี้ต่างๆ ของเขา เช่น แผนที่ p, ลองใหม่อีกครั้ง และ ไอเอสสตรีม ถือเป็นองค์ประกอบพื้นฐานที่ใช้ทั่วทั้งระบบนิเวศ Node.js
โดยการสนับสนุนงานของ Sindre เราช่วยสนับสนุนการพัฒนายูทิลิตี้ที่สำคัญเหล่านี้ที่ทำให้การพัฒนา JavaScript มีประสิทธิภาพและเชื่อถือได้มากขึ้น
การสนับสนุนเหล่านี้สะท้อนให้เห็นถึงความมุ่งมั่นของเราที่มีต่อระบบนิเวศโอเพนซอร์สที่กว้างขึ้น เราตระหนักดีว่าความสำเร็จของเรานั้นสร้างขึ้นบนรากฐานที่ผู้สนับสนุนเหล่านี้และผู้สนับสนุนท่านอื่นๆ ได้วางไว้ และเรามุ่งมั่นที่จะสร้างความยั่งยืนให้กับระบบนิเวศทั้งหมด
การเปิดเผยช่องโหว่ด้านความปลอดภัยในระบบนิเวศ JavaScript
ความมุ่งมั่นของเราที่มีต่อโอเพนซอร์สนั้นครอบคลุมมากกว่าแค่การพัฒนาฟีเจอร์ต่างๆ ไปจนถึงการระบุและแก้ไขช่องโหว่ด้านความปลอดภัยที่อาจส่งผลกระทบต่อนักพัฒนาหลายล้านคน บทบาทสำคัญที่สุดหลายประการของเราต่อระบบนิเวศ JavaScript อยู่ในขอบเขตของความปลอดภัย
การช่วยเหลือ Koa-Router
ในเดือนกุมภาพันธ์ 2019 นิคพบปัญหาสำคัญในการบำรุงรักษาแพ็กเกจ koa-router ยอดนิยม แพ็กเกจนี้ถูกยกเลิกโดยผู้ดูแลระบบเดิมในฐานะ รายงานบน Hacker News ทำให้ช่องโหว่ด้านความปลอดภัยไม่ได้รับการแก้ไข และชุมชนไม่ได้รับการอัปเดต
Warning
แพ็คเกจที่ถูกละทิ้งซึ่งมีช่องโหว่ด้านความปลอดภัยก่อให้เกิดความเสี่ยงอย่างมากต่อระบบนิเวศโดยรวม โดยเฉพาะอย่างยิ่งเมื่อมีการดาวน์โหลดหลายล้านครั้งต่อสัปดาห์
นิคจึงได้สร้าง @koa/เราเตอร์ ขึ้นมาเพื่อตอบสนองต่อปัญหานี้ และช่วยแจ้งเตือนชุมชนเกี่ยวกับสถานการณ์ดังกล่าว เขาดูแลแพ็กเกจสำคัญนี้มาโดยตลอด เพื่อให้แน่ใจว่าผู้ใช้ Koa จะได้รับโซลูชันการกำหนดเส้นทางที่ปลอดภัยและได้รับการดูแลอย่างดี
การแก้ไขช่องโหว่ ReDoS
ในปี 2020 นิคได้ระบุและแก้ไขช่องโหว่ การปฏิเสธการให้บริการของนิพจน์ทั่วไป (ReDoS) ที่สำคัญในแพ็กเกจ url-regex
ที่มีการใช้งานอย่างแพร่หลาย ช่องโหว่นี้ (SNYK-JS-URLREGEX-569472) อาจทำให้ผู้โจมตีสามารถทำให้เกิดภาวะปฏิเสธการให้บริการ (Denial of Service) ได้ด้วยการส่งอินพุตที่สร้างขึ้นเป็นพิเศษ ซึ่งทำให้เกิดการย้อนกลับอย่างร้ายแรงในนิพจน์ทั่วไป
แทนที่จะแก้ไขแพ็กเกจเดิมที่มีอยู่ นิคได้สร้าง url-regex-safe
ขึ้นมา ซึ่งเป็นเวอร์ชันที่เขียนขึ้นใหม่ทั้งหมดเพื่อแก้ไขช่องโหว่นี้ โดยยังคงความเข้ากันได้กับ API เดิม เขายังเผยแพร่ โพสต์บล็อกที่ครอบคลุม ที่อธิบายช่องโหว่นี้และวิธีการแก้ไขอีกด้วย
งานนี้แสดงให้เห็นแนวทางของเราในการรักษาความปลอดภัย ไม่ใช่แค่การแก้ไขปัญหาเท่านั้น แต่ยังรวมถึงการให้ความรู้แก่ชุมชนและเสนอทางเลือกที่มั่นคงเพื่อป้องกันปัญหาที่คล้ายคลึงกันในอนาคต
สนับสนุน Node.js และความปลอดภัยของ Chromium
นิคยังมีบทบาทอย่างแข็งขันในการสนับสนุนการปรับปรุงความปลอดภัยในระบบนิเวศโดยรวม ในเดือนสิงหาคม 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[22][23]
- การปรับปรุงตัวแยกวิเคราะห์อีเมล: เราได้แก้ไขข้อผิดพลาดในการถอดรหัสลำดับอักขระและแก้ไขปัญหาตัวแยกวิเคราะห์ที่อาจทำให้การประมวลผลอีเมลล้มเหลว[24][25]
การสนับสนุนเหล่านี้ช่วยให้แน่ใจว่า Nodemailer ยังคงเป็นรากฐานที่เชื่อถือได้สำหรับการประมวลผลอีเมลในแอปพลิเคชัน Node.js รวมถึงการส่งต่ออีเมล
การพัฒนาการตรวจสอบสิทธิ์อีเมลด้วย Mailauth
ไมลอธ มอบฟังก์ชันการตรวจสอบสิทธิ์อีเมลที่สำคัญ และการสนับสนุนของเราได้ปรับปรุงความสามารถของฟังก์ชันดังกล่าวอย่างมีนัยสำคัญ:
- การปรับปรุงการยืนยัน DKIM: เราค้นพบและรายงานว่า X/Twitter มีปัญหาแคช DNS ที่ทำให้ DKIM สำหรับข้อความขาออกล้มเหลว โดยรายงานเรื่องนี้บน Hacker One[26]
- การปรับปรุง DMARC และ ARC: เราได้แก้ไขปัญหาเกี่ยวกับการยืนยัน DMARC และ ARC ที่อาจทำให้ผลลัพธ์การตรวจสอบสิทธิ์ไม่ถูกต้อง[27][28]
- การเพิ่มประสิทธิภาพการทำงาน: เราได้มีส่วนร่วมในการเพิ่มประสิทธิภาพเพื่อปรับปรุงประสิทธิภาพของกระบวนการตรวจสอบสิทธิ์อีเมล[29][30][31][32]
การปรับปรุงเหล่านี้ช่วยให้แน่ใจว่าการตรวจสอบอีเมลมีความแม่นยำและเชื่อถือได้ ช่วยปกป้องผู้ใช้จากการโจมตีแบบฟิชชิ่งและการปลอมแปลง
การปรับปรุงเวลาการทำงานที่สำคัญของ
การสนับสนุนของเราต่อ Upptime ประกอบด้วย:
- การตรวจสอบใบรับรอง SSL: เราได้เพิ่มฟังก์ชันการตรวจสอบการหมดอายุของใบรับรอง SSL เพื่อป้องกันปัญหาการหยุดทำงานโดยไม่คาดคิดเนื่องจากใบรับรองหมดอายุ[33]
- การรองรับหมายเลข SMS หลายหมายเลข: เราได้เพิ่มฟังก์ชันการแจ้งเตือนสมาชิกในทีมหลายคนผ่าน SMS เมื่อเกิดเหตุการณ์ เพื่อปรับปรุงเวลาในการตอบสนอง[34]
- การแก้ไขการตรวจสอบ IPv6: เราได้แก้ไขปัญหาเกี่ยวกับการตรวจสอบการเชื่อมต่อ IPv6 เพื่อให้การตรวจสอบมีความแม่นยำมากขึ้นในสภาพแวดล้อมเครือข่ายสมัยใหม่[35]
- การรองรับโหมดมืด/สว่าง: เราได้เพิ่มการรองรับธีมเพื่อปรับปรุงประสบการณ์การใช้งานหน้าสถานะ[36]
- การรองรับ TCP-Ping ที่ดีขึ้น: เราได้ปรับปรุงฟังก์ชันการ ping ของ TCP เพื่อให้การทดสอบการเชื่อมต่อมีความน่าเชื่อถือมากขึ้น[37]
การปรับปรุงเหล่านี้ไม่เพียงแต่เป็นประโยชน์ต่อการติดตามสถานะของ Forward Email เท่านั้น แต่ยังพร้อมใช้งานสำหรับชุมชนผู้ใช้ Upptime ทั้งหมดอีกด้วย ซึ่งแสดงให้เห็นถึงความมุ่งมั่นของเราในการปรับปรุงเครื่องมือที่เราพึ่งพา
กาวที่ยึดทุกอย่างเข้าด้วยกัน: รหัสที่กำหนดเองตามขนาด
แม้ว่าแพ็กเกจ npm และการสนับสนุนโครงการที่มีอยู่ของเราจะมีความสำคัญ แต่โค้ดแบบกำหนดเองที่ผสานรวมส่วนประกอบเหล่านี้เข้าด้วยกันต่างหากที่แสดงให้เห็นถึงความเชี่ยวชาญทางเทคนิคของเราอย่างแท้จริง ฐานโค้ด Forward Email แสดงถึงความพยายามในการพัฒนาตลอดทศวรรษ ย้อนกลับไปถึงปี 2017 เมื่อโครงการเริ่มต้นในชื่อ การส่งต่ออีเมลฟรี ก่อนที่จะถูกรวมเข้าเป็น monorepo
ความพยายามพัฒนาครั้งใหญ่
ขนาดของโค้ดการรวมแบบกำหนดเองนี้ถือว่าน่าประทับใจ:
- การมีส่วนร่วมทั้งหมด: มากกว่า 3,217 คอมมิต
- ขนาดฐานโค้ด: โค้ดมากกว่า 421,545 บรรทัด ในไฟล์ JavaScript, Pug, CSS และ JSON[^33]
นี่หมายถึงการทำงานพัฒนา เซสชันการดีบัก และการปรับปรุงประสิทธิภาพเป็นเวลาหลายพันชั่วโมง มันคือ "สูตรลับ" ที่เปลี่ยนแพ็กเกจแต่ละแพ็กเกจให้กลายเป็นบริการที่เชื่อมโยงและเชื่อถือได้ ซึ่งลูกค้าหลายพันคนใช้งานทุกวัน
การรวมการอ้างอิงหลัก
ฐานโค้ดการส่งต่ออีเมลจะรวมการอ้างอิงจำนวนมากเข้าเป็นหนึ่งเดียวอย่างราบรื่น:
- การประมวลผลอีเมล: ผสานรวม Nodemailer สำหรับการส่ง, เซิร์ฟเวอร์ SMTP สำหรับการรับ และ 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 ของเรา ซึ่งสร้างขึ้นโดยใช้แพ็คเกจหลักสองแพ็คเกจ:
-
ส้มแมนดาริน: การใช้งาน DNS-over-HTTPS ของ Node.js ของเราช่วยให้สามารถแทนที่ตัวแก้ไข DNS มาตรฐานได้อย่างง่ายดาย โดยมีการลองใหม่ การหมดเวลา การหมุนเวียนเซิร์ฟเวอร์อัจฉริยะ และการรองรับแคชในตัว
-
เอ็มเอ็กซ์-คอนเนค: แพ็คเกจนี้สร้างการเชื่อมต่อ TCP ไปยังเซิร์ฟเวอร์ MX โดยใช้โดเมนเป้าหมายหรือที่อยู่อีเมล แก้ไขเซิร์ฟเวอร์ MX ที่เหมาะสม และเชื่อมต่อกับเซิร์ฟเวอร์เหล่านั้นตามลำดับความสำคัญ
เราได้บูรณาการ Tangerine เข้ากับ mx-connect ผ่าน คำขอดึงข้อมูล #4 ช่วยให้มั่นใจได้ว่าคำขอ DNS ผ่าน HTTP ในระดับแอปพลิเคชันจะถูกส่งไปยัง Forward Email วิธีนี้ช่วยให้สามารถแคช DNS ทั่วโลกได้อย่างครอบคลุมและมีความสอดคล้องกันในระดับ 1:1 ในทุกภูมิภาค แอปพลิเคชัน หรือกระบวนการ ซึ่งเป็นสิ่งสำคัญอย่างยิ่งสำหรับการส่งอีเมลที่เชื่อถือได้ในระบบแบบกระจาย
ผลกระทบต่อองค์กร: จากโอเพนซอร์สสู่โซลูชันที่สำคัญต่อภารกิจ
ความสำเร็จของการพัฒนาโอเพนซอร์สที่ยาวนานกว่าทศวรรษของเรา ทำให้ Forward Email สามารถให้บริการได้ไม่เพียงแต่นักพัฒนารายบุคคลเท่านั้น แต่ยังรวมถึงองค์กรขนาดใหญ่และสถาบันการศึกษาที่เป็นแกนหลักของขบวนการโอเพนซอร์สอีกด้วย
กรณีศึกษาโครงสร้างพื้นฐานอีเมลที่สำคัญต่อภารกิจ
ความมุ่งมั่นของเราในด้านความน่าเชื่อถือ ความเป็นส่วนตัว และหลักการโอเพนซอร์ส ทำให้ Forward Email เป็นตัวเลือกที่เชื่อถือได้สำหรับองค์กรที่มีข้อกำหนดด้านอีเมลที่เข้มงวด:
-
สถาบันการศึกษา: ตามรายละเอียดใน [กรณีศึกษาการส่งต่ออีเมลของศิษย์เก่า]](https://forwardemail.net/blog/docs/alumni-email-forwarding-university-case-study) มหาวิทยาลัยชั้นนำต่างพึ่งพาโครงสร้างพื้นฐานของเราเพื่อรักษาการเชื่อมต่อตลอดชีวิตกับศิษย์เก่าหลายแสนคนผ่านบริการส่งต่ออีเมลที่เชื่อถือได้
-
โซลูชัน Enterprise Linux: กรณีศึกษาองค์กรอีเมล Ubuntu แบบ Canonical แสดงให้เห็นว่าแนวทางโอเพ่นซอร์สของเราสอดคล้องกับความต้องการของผู้ให้บริการ Linux ระดับองค์กรอย่างไร โดยมอบความโปร่งใสและการควบคุมที่พวกเขาต้องการ
-
มูลนิธิโอเพ่นซอร์ส: สิ่งที่น่าเชื่อถือที่สุดน่าจะเป็นความร่วมมือของเรากับมูลนิธิ Linux ตามที่ระบุไว้ใน กรณีศึกษาองค์กรอีเมลของมูลนิธิ Linux ซึ่งบริการของเราช่วยขับเคลื่อนการสื่อสารสำหรับองค์กรที่ดูแลการพัฒนา Linux
แพ็กเกจโอเพนซอร์สของเราได้รับการดูแลรักษาอย่างพิถีพิถันตลอดหลายปีที่ผ่านมา ซึ่งทำให้เราสามารถพัฒนาบริการอีเมลที่ปัจจุบันรองรับชุมชนและองค์กรที่สนับสนุนซอฟต์แวร์โอเพนซอร์สได้อย่างสมดุล เส้นทางครบวงจรนี้ ตั้งแต่การสนับสนุนแพ็กเกจส่วนบุคคลไปจนถึงการขับเคลื่อนโครงสร้างพื้นฐานอีเมลระดับองค์กรสำหรับผู้นำด้านโอเพนซอร์ส ถือเป็นเครื่องยืนยันถึงแนวทางการพัฒนาซอฟต์แวร์ของเราอย่างครบถ้วน
ทศวรรษแห่งโอเพนซอร์ส: มองไปข้างหน้า
เมื่อเรามองย้อนกลับไปถึงการสนับสนุนโอเพนซอร์สในช่วงทศวรรษที่ผ่านมาและมองไปข้างหน้าถึงสิบปีข้างหน้า เราเต็มไปด้วยความขอบคุณต่อชุมชนที่สนับสนุนงานของเรา และรู้สึกตื่นเต้นกับสิ่งที่จะเกิดขึ้นต่อไป
การเดินทางของเราจากผู้สร้างสรรค์แพ็กเกจรายบุคคลสู่การเป็นผู้ดูแลโครงสร้างพื้นฐานอีเมลที่ครอบคลุมซึ่งใช้งานโดยองค์กรขนาดใหญ่และมูลนิธิโอเพนซอร์สนั้นน่าทึ่งมาก นับเป็นเครื่องพิสูจน์ถึงพลังของการพัฒนาโอเพนซอร์ส และผลกระทบที่ซอฟต์แวร์ที่ใส่ใจและบำรุงรักษาอย่างดีสามารถมีต่อระบบนิเวศในวงกว้างได้
ในปีต่อๆ ไป เราจะมุ่งมั่นที่จะ:
- มุ่งมั่นดูแลรักษาและพัฒนาแพ็คเกจที่มีอยู่ อย่างต่อเนื่อง เพื่อให้มั่นใจว่าแพ็คเกจเหล่านี้จะยังคงเป็นเครื่องมือที่เชื่อถือได้สำหรับนักพัฒนาทั่วโลก
- ขยายการสนับสนุนโครงการโครงสร้างพื้นฐานที่สำคัญ โดยเฉพาะอย่างยิ่งในด้านอีเมลและความปลอดภัย
- ยกระดับความสามารถของ Forward Email ควบคู่ไปกับการยึดมั่นในพันธสัญญาของเราต่อความเป็นส่วนตัว ความปลอดภัย และความโปร่งใส
- สนับสนุนนักพัฒนาโอเพนซอร์สรุ่นต่อไป ผ่านการให้คำปรึกษา การสนับสนุน และการมีส่วนร่วมกับชุมชน
เราเชื่อว่าอนาคตของการพัฒนาซอฟต์แวร์นั้นเปิดกว้าง ร่วมมือกัน และสร้างขึ้นบนรากฐานของความไว้วางใจ ด้วยการสนับสนุนแพ็คเกจคุณภาพสูงที่เน้นความปลอดภัยให้กับระบบนิเวศ JavaScript อย่างต่อเนื่อง เราหวังว่าจะได้มีส่วนร่วมเล็กๆ น้อยๆ ในการสร้างอนาคตนั้น
ขอขอบคุณทุกท่านที่ใช้แพ็กเกจของเรา มีส่วนร่วมในโครงการของเรา รายงานปัญหา หรือเพียงแค่เผยแพร่ผลงานของเรา การสนับสนุนของคุณทำให้ทศวรรษแห่งผลกระทบนี้เกิดขึ้นได้ และเราตื่นเต้นที่จะได้เห็นว่าเราจะสามารถบรรลุผลอะไรได้บ้างในอีกสิบปีข้างหน้า
สถิติการดาวน์โหลด npm สำหรับ bson-objectid, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ url-regex-safe, เมษายน 2025 ↩︎
จำนวนดาว GitHub สำหรับ forwardemail/forwardemail.net ณ เมษายน 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ superagent, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ supertest, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ koa, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ @koa/router, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ koa-router, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ url-regex, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ preview-email, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ cabin, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ @breejs/later, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับเทมเพลตอีเมล, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ get-path, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ url-regex-safe, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ dotenv-parse-variables, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ @koa/multer, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ spamscanner, กุมภาพันธ์-มีนาคม 2025 ↩︎
สถิติการดาวน์โหลด npm สำหรับ bree, กุมภาพันธ์-มีนาคม 2025 ↩︎
รูปแบบการดาวน์โหลดรายวันจากสถิติ npm, เมษายน 2025 ↩︎
รูปแบบการดาวน์โหลดรายสัปดาห์จากสถิติ npm, เมษายน 2025 ↩︎
https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min ↩︎
https://github.com/nodemailer/smtp-server/issues/node-v12-requires-tls-min0 ↩︎
อ้างอิงจากปัญหา GitHub ในคลัง Upptime ↩︎
อ้างอิงจากปัญหา GitHub ในคลัง Upptime ↩︎
อ้างอิงจากปัญหา GitHub ในคลัง Upptime ↩︎
อ้างอิงจากคำขอ pull ของ GitHub ไปยัง Upptime ↩︎
อ้างอิงจากคำขอ pull ของ GitHub ไปยัง Upptime ↩︎