อัปเดต 5/24/2018:ตอนนี้เราเป็น Angular เวอร์ชัน +3 จากโพสต์เดิมของฉันและยังไม่มีวิธีแก้ไขขั้นสุดท้ายที่สามารถใช้งานได้ Lars Meijdam (@LarsMeijdam) ได้เสนอแนวทางที่น่าสนใจซึ่งคุ้มค่าแก่การดู (เนื่องจากปัญหาด้านกรรมสิทธิ์เขาจึงต้องลบที่เก็บ GitHub ชั่วคราวซึ่งเขาเคยโพสต์ตัวอย่างของเขาอย่างไรก็ตามคุณสามารถส่งข้อความถึงเขาโดยตรงหากคุณต้องการสำเนาโปรดดูความคิดเห็นด้านล่างสำหรับข้อมูลเพิ่มเติม)
การเปลี่ยนแปลงทางสถาปัตยกรรมล่าสุดใน Angular 6 ทำให้เราเข้าใกล้โซลูชันมากขึ้น นอกจากนี้ Angular Elements ( https://angular.io/guide/elements ) ยังมีฟังก์ชั่นส่วนประกอบบางอย่างแม้ว่าจะไม่ใช่สิ่งที่ฉันอธิบายไว้ในโพสต์นี้ในตอนแรก
หากใครจากทีม Angular ที่น่าทึ่งบังเอิญเจอสิ่งนี้โปรดทราบว่าดูเหมือนจะมีคนอื่น ๆ อีกมากมายที่สนใจฟังก์ชันนี้เช่นกัน อาจเป็นเรื่องที่ควรพิจารณาสำหรับงานในมือ
ผมอยากจะใช้ pluggable (Plug-in) ในกรอบAngular 2
, Angular 4
, Angular 5
หรือAngular 6
แอพลิเคชัน
(กรณีการใช้งานเฉพาะของฉันสำหรับการพัฒนาเฟรมเวิร์กที่เสียบได้นี้คือฉันจำเป็นต้องพัฒนาระบบการจัดการเนื้อหาขนาดเล็กด้วยเหตุผลหลายประการที่ไม่จำเป็นต้องอธิบายไว้ในที่Angular 2/4/5/6
นี้จึงเป็นความเหมาะสมที่ใกล้เคียงที่สุดสำหรับความต้องการส่วนใหญ่ของระบบนั้น)
โดยเฟรมเวิร์กแบบเสียบได้ (หรือสถาปัตยกรรมปลั๊กอิน) ฉันหมายถึงระบบที่อนุญาตให้นักพัฒนาบุคคลที่สามสร้างหรือขยายฟังก์ชันการทำงานของแอปพลิเคชันหลักโดยใช้ส่วนประกอบที่เสียบได้โดยไม่ต้องเข้าถึงโดยตรงหรือรู้เกี่ยวกับซอร์สโค้ดของแอปพลิเคชันหลัก หรืองานภายใน
(วลีที่เกี่ยวกับ " โดยไม่ต้องเข้าถึงโดยตรงหรือรู้เกี่ยวกับซอร์สโค้ดของแอปพลิเคชันหรือการทำงานภายใน " เป็นวัตถุประสงค์หลัก)
ตัวอย่างของกรอบ pluggable รวมทั่วไประบบการจัดการเนื้อหาเหมือนหรือWordPress
Drupal
สถานการณ์ในอุดมคติ (เช่นเดียวกับ Drupal) คือการวางส่วนประกอบที่เสียบได้ (หรือปลั๊กอิน) เหล่านี้ลงในโฟลเดอร์โดยอัตโนมัติให้แอปพลิเคชันตรวจหาหรือค้นพบโดยอัตโนมัติและทำให้ "ทำงาน" ได้อย่างน่าอัศจรรย์ การที่สิ่งนี้เกิดขึ้นในลักษณะ Hot-Pluggable ซึ่งหมายความว่าในขณะที่แอปกำลังทำงานอยู่จะเหมาะสมที่สุด
ขณะนี้ฉันกำลังพยายามหาคำตอบ ( ด้วยความช่วยเหลือของคุณ ) สำหรับคำถามห้าข้อต่อไปนี้
- การปฏิบัติจริง:โครงร่างปลั๊กอินสำหรับ
Angular 2/4/5/6
แอปพลิเคชันสามารถใช้งานได้จริงหรือไม่? (จนถึงตอนนี้ฉันยังไม่พบวิธีที่เป็นประโยชน์ในการสร้างเฟรมเวิร์กที่เสียบได้อย่างแท้จริงด้วยAngular2/4/5/6
) - ความท้าทายที่คาดหวัง:อาจพบความท้าทายอะไรบ้างในการนำโครงงานปลั๊กอินไปใช้กับ
Angular 2/4/5/6
แอปพลิเคชัน - กลยุทธ์การใช้งาน: สามารถใช้เทคนิคหรือกลยุทธ์เฉพาะใดในการใช้กรอบปลั๊กอินสำหรับ
Angular 2/4/5/6
แอปพลิเคชัน - แนวทางปฏิบัติที่ดีที่สุด: แนวทางปฏิบัติที่ดีที่สุดในการนำระบบปลั๊กอินไปใช้กับ
Angular 2/4/5/6
แอปพลิเคชันคืออะไร - ทางเลือกเทคโนโลยี: ถ้ากรอบปลั๊กอินเป็นไม่ได้ในทางปฏิบัติใน
Angular 2/4/5/6
การประยุกต์ใช้สิ่งที่ค่อนข้างเทียบเท่าเทคโนโลยี (เช่นReact
) อาจจะเหมาะสำหรับเว็บแอพพลิเคชันที่ทันสมัยปฏิกิริยาสูง ?
โดยทั่วไปการใช้Angular 2/4/5/6
เป็นที่พึงปรารถนามากเนื่องจาก:
- มันเร็วมากโดยธรรมชาติอย่างเห็นได้ชัด
- ใช้แบนด์วิดท์น้อยมาก (หลังจากโหลดครั้งแรก)
- มีรอยเท้าค่อนข้างเล็ก (หลัง
AOT
และtree shaking
) - และรอยเท้านั้นยังคงหดตัว - มันทำงานได้ดีและทีม Angular และชุมชนกำลังเติบโตอย่างรวดเร็วของระบบนิเวศ
- มันเล่นได้ดีกับเทคโนโลยีเว็บที่ดีที่สุดและล่าสุดมากมายเช่น
TypeScript
และObservables
- Angular 5 รองรับพนักงานบริการแล้ว ( https://medium.com/@webmaxru/a-new-angular-service-worker-creating-automatic-progressive-web-apps-part-1-theory-37d7d7647cc7 )
- ได้รับการสนับสนุนโดย
Google
ก็มีโอกาสที่จะได้รับการสนับสนุนและเพิ่มดีในอนาคต
ฉันต้องการใช้Angular 2/4/5/6
สำหรับโครงการปัจจุบันของฉันเป็นอย่างมาก ถ้าฉันสามารถใช้Angular 2/4/5/6
ฉันจะใช้Angular-CLI
และอาจจะAngular Universal
(สำหรับการแสดงผลฝั่งเซิร์ฟเวอร์)
นี่คือความคิดของฉันเกี่ยวกับคำถามข้างต้น โปรดตรวจสอบและให้ข้อเสนอแนะและการตรัสรู้ของคุณ
Angular 2/4/5/6
แอปใช้แพ็คเกจ - แต่ไม่จำเป็นต้องเหมือนกับการอนุญาตปลั๊กอินภายในแอปพลิเคชัน คุณสามารถเพิ่มปลั๊กอินในระบบอื่น ๆ (เช่นDrupal
) ได้โดยการวางโฟลเดอร์ปลั๊กอินลงในไดเร็กทอรีโมดูลทั่วไปซึ่งระบบจะ "หยิบ" ขึ้นมาโดยอัตโนมัติ ในAngular 2/4/5/6
แพคเกจ (อาจเป็นปลั๊กอิน) มักจะติดตั้งผ่านnpm
เพิ่มไปยังpackage.json
แล้วนำเข้าสู่แอปด้วยตนเองเช่นเดียวกับในapp.module
. สิ่งนี้ซับซ้อนกว่าDrupal
วิธีการวางโฟลเดอร์และให้ระบบตรวจจับแพ็คเกจโดยอัตโนมัติ ยิ่งการติดตั้งปลั๊กอินมีความซับซ้อนมากเท่าไหร่ก็จะมีโอกาสน้อยที่ผู้คนจะใช้งานได้ มันจะดีกว่ามากถ้ามีวิธีสำหรับAngular 2/4/5/6
เพื่อตรวจหาและติดตั้งปลั๊กอินโดยอัตโนมัติ ฉันสนใจมากที่จะค้นหาวิธีการที่ช่วยให้ผู้ที่ไม่ใช่นักพัฒนาสามารถติดตั้งAngular 2/4/5/6
แอปพลิเคชันและติดตั้งปลั๊กอินที่เลือกโดยไม่ต้องเข้าใจสถาปัตยกรรมของแอปพลิเคชันทั้งหมดโดยทั่วไปประโยชน์อย่างหนึ่งของการจัดหาสถาปัตยกรรมแบบเสียบได้คือการที่นักพัฒนาบุคคลที่สามสามารถขยายการทำงานของระบบได้ง่ายมาก เห็นได้ชัดว่านักพัฒนาเหล่านี้จะไม่คุ้นเคยกับความซับซ้อนทั้งหมดของโค้ดสำหรับแอปพลิเคชันที่พวกเขาเสียบเข้า เมื่อพัฒนาปลั๊กอินแล้วผู้ใช้ด้านเทคนิครายอื่น ๆ ก็สามารถติดตั้งแอปพลิเคชันและปลั๊กอินที่เลือกได้ อย่างไรก็ตาม
Angular 2/4/5/6
ค่อนข้างซับซ้อนและมีช่วงการเรียนรู้ที่ยาวมาก สิ่งที่ซับซ้อนต่อไปส่วนใหญ่การผลิตAngular 2/4/5/6
การใช้งานนอกจากนี้ยังใช้Angular-CLI
, และAngular Universal
WebPack
คนที่ใช้ปลั๊กอินอาจจะต้องมีความรู้พื้นฐานอย่างน้อยว่าสิ่งเหล่านี้เข้ากันได้อย่างไร - พร้อมกับความรู้ในการทำงานที่ดีTypeScript
NodeJS
และความคุ้นเคยที่เหมาะสมกับ ข้อกำหนดด้านความรู้มีมากจนไม่มีบุคคลที่สามต้องการพัฒนาปลั๊กอินหรือไม่?ปลั๊กอินส่วนใหญ่มักจะมีส่วนประกอบฝั่งเซิร์ฟเวอร์ (เช่นสำหรับจัดเก็บ / เรียกข้อมูลที่เกี่ยวข้องกับปลั๊กอิน) รวมถึงเอาต์พุตฝั่งไคลเอ็นต์บางส่วน
Angular 2/4/5
โดยเฉพาะ (และอย่างยิ่ง) ไม่สนับสนุนนักพัฒนาจากการฉีดเทมเพลตของตนเองในขณะรันไทม์เนื่องจากอาจก่อให้เกิดความเสี่ยงด้านความปลอดภัยอย่างร้ายแรง ในการจัดการเอาต์พุตหลายประเภทที่ปลั๊กอินอาจรองรับได้ (เช่นการแสดงกราฟ) ดูเหมือนว่าการอนุญาตให้ผู้ใช้สร้างเนื้อหาที่ถูกแทรกเข้าไปในสตรีมการตอบกลับในรูปแบบอื่นเป็นสิ่งที่จำเป็น ฉันสงสัยว่ามันจะเป็นไปได้อย่างไรที่จะรองรับความต้องการนี้โดยไม่ต้องใช้Angular 2/4/5/6
กลไกการรักษาความปลอดภัยโดยเปรียบเปรยAngular 2/4/5/6
แอ็พพลิเคชันการผลิตส่วนใหญ่คอมไพล์ล่วงหน้าโดยใช้คอมไพล์Ahead of Time
(AOT
) (อาจเป็นไปได้ทั้งหมด) ฉันไม่แน่ใจว่าจะเพิ่มปลั๊กอินไปยัง (หรือรวมเข้ากับ) แอปพลิเคชันที่รวบรวมไว้ล่วงหน้าได้อย่างไร สถานการณ์ที่ดีที่สุดคือการรวบรวมปลั๊กอินแยกจากแอปพลิเคชันหลัก อย่างไรก็ตามฉันไม่แน่ใจว่าจะทำงานนี้อย่างไร ทางเลือกอาจเป็นการคอมไพล์แอปพลิเคชันทั้งหมดอีกครั้งด้วยปลั๊กอินใด ๆ ที่รวมอยู่ แต่จะทำให้เกิดความซับซ้อนขึ้นเล็กน้อยสำหรับผู้ใช้ระดับผู้ดูแลระบบที่ต้องการติดตั้งแอปพลิเคชัน (บนเซิร์ฟเวอร์ของตัวเอง) พร้อมกับปลั๊กอินที่เลือกใน
Angular 2/4/5/6
แอปพลิเคชันโดยเฉพาะแอปพลิเคชันที่รวบรวมไว้ล่วงหน้าโค้ดที่ผิดพลาดหรือขัดแย้งกันเพียงชิ้นเดียวสามารถทำลายแอปพลิเคชันทั้งหมดได้Angular 2/4/5/6
แอปพลิเคชันไม่ใช่วิธีแก้จุดบกพร่องที่ง่ายที่สุดเสมอไป การใช้ปลั๊กอินที่มีพฤติกรรมไม่เหมาะสมอาจส่งผลให้เกิดประสบการณ์ที่ไม่พึงประสงค์ ขณะนี้ฉันไม่ทราบถึงกลไกในการจัดการปลั๊กอินที่มีพฤติกรรมไม่เหมาะสม