โมดูลซิงเกิลตันและการจัดการเวอร์ชัน
ทำความเข้าใจวิธีรับรองว่าโมดูลจะถูกโหลดเพียงอินสแตนซ์เดียว และจัดการข้อขัดแย้งของเวอร์ชัน
โมดูลซิงเกิลตันและการจัดการเวอร์ชัน เป็นบทเรียน Micro Frontends Architecture with Module Federation ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Micro Frontends Architecture with Module Federation และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Micro Frontends Architecture with Module Federation มีบทเรียนทั้งหมด 4 บทเรียน
บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ
What are Singleton Modules?
In Micro Frontend architectures, a singleton module is a piece of code or a library that should only ever exist as a single instance across your entire application, even if multiple Micro Frontends try to load it.
Think of it as a unique resource that all parts of your system need to share consistently.
- Ensures a single source of truth.
- Prevents conflicting states or behaviors.
Why Singletons Matter for MFEs
Imagine multiple Micro Frontends (MFEs) all loading their own copy of a UI library like React, or a state management library like Redux.
Without singletons, you could end up with:
- Multiple instances of React Context, breaking component communication.
- Separate Redux stores, leading to inconsistent application state.
- Increased bundle size due to duplicate code.
Singletons solve these issues by guaranteeing a unified dependency.
Implementing Singletons with MF
Module Federation makes it easy to declare shared modules as singletons using the singleton: true option in your Webpack configuration.
When this is set, Webpack ensures that only one version of the specified module is loaded and used by all federated applications (hosts and remotes) at runtime.
Code: Configuring a Singleton
Here's how you'd configure a shared module, like react, to be a singleton in your webpack.config.js:
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ... other Webpack config
plugins: [
new ModuleFederationPlugin({
name: 'host_app',
remotes: {},
shared: {
react: {
singleton: true, // Only one React instance allowed
requiredVersion: '^18.0.0',
},
'react-dom': {
singleton: true, // Only one ReactDOM instance allowed
requiredVersion: '^18.0.0',
},
},
}),
],
};Understanding Shared Module Versioning
Beyond ensuring a single *instance* (singleton), you also need to manage which *version* of a shared module gets loaded.
What if one MFE needs React v17 and another needs React v18? Module Federation has mechanisms to handle these version conflicts and ensure compatibility or gracefully fail.
`requiredVersion` for Specificity
The requiredVersion option in the shared configuration allows you to specify the semantic version (semver) range that your application expects for a shared module.
Webpack will try to find a compatible version among the host and remote applications. If a compatible version is found, it's used. If not, it might load a fallback or throw an error, depending on other settings.
Code: Specifying Required Versions
Here's how you might define a requiredVersion for a shared library:
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ...
plugins: [
new ModuleFederationPlugin({
// ...
shared: {
lodash: {
singleton: false,
requiredVersion: '^4.17.21', // Any version compatible with 4.17.21
},
moment: {
singleton: true,
requiredVersion: '2.29.1', // Exactly version 2.29.1
},
},
}),
],
};`strictVersion: true` for Strictness
While requiredVersion guides version selection, strictVersion: true enforces it rigorously.
If strictVersion: true is enabled and a remote module requests a version that is incompatible with the host's requiredVersion (or the version already loaded), Module Federation will throw an error and prevent the application from loading. This prevents unexpected behavior from version mismatches.
Code: Enforcing Strict Versioning
Combining singleton, requiredVersion, and strictVersion for critical dependencies:
const { ModuleFederationPlugin } = require('webpack').container;
module.exports = {
// ...
plugins: [
new ModuleFederationPlugin({
// ...
shared: {
react: {
singleton: true,
requiredVersion: '^18.0.0',
strictVersion: true, // Fail if versions are incompatible
},
// ... other shared modules
},
}),
],
};Best Practices for Shared Dependencies
To effectively manage singleton modules and versioning:
- Use Semantic Versioning (SemVer): Adhere to major.minor.patch for all shared modules.
- Communicate: Ensure teams are aware of shared module updates and version requirements.
- Test Compatibility: Regularly test your federated applications to ensure shared modules work across all remotes and hosts.
- Be Strategic: Not all shared modules need to be singletons or have strict versioning. Apply these settings thoughtfully based on the module's criticality.
Quick Check: Singleton & Versioning
When configuring shared modules in Module Federation, what are the primary benefits of using singleton: true and strictVersion: true?
Recap & Next Steps
You've now learned about singleton modules and versioning in Module Federation!
- Singleton modules ensure only one instance of a shared dependency exists across your federated application, crucial for stateful libraries.
- The
requiredVersionandstrictVersionoptions help manage compatibility and prevent issues arising from conflicting module versions.
These techniques are vital for building robust and predictable Micro Frontend applications.
เรียนรู้ JavaScript ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 12
- บทเรียน
- 48
คำถามที่พบบ่อย
บทเรียน “โมดูลซิงเกิลตันและการจัดการเวอร์ชัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “โมดูลซิงเกิลตันและการจัดการเวอร์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Micro Frontends Architecture with Module Federation ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Micro Frontends Architecture with Module Federation มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “โมดูลซิงเกิลตันและการจัดการเวอร์ชัน”
ทำความเข้าใจวิธีรับรองว่าโมดูลจะถูกโหลดเพียงอินสแตนซ์เดียว และจัดการข้อขัดแย้งของเวอร์ชัน คุณปฏิบัติ Micro Frontends Architecture with Module Federation ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Micro Frontends Architecture with Module Federation หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Micro Frontends Architecture with Module Federation บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “โมดูลซิงเกิลตันและการจัดการเวอร์ชัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Micro Frontends Architecture with Module Federation นี้ได้ไหม
ได้ บทเรียน Micro Frontends Architecture with Module Federation ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียกใช้สิ่งที่ต้องพึ่งพาร่วมกัน
- โมดูลซิงเกิลตันและการจัดการเวอร์ชัน
- การโหลดโมดูลแบบไดนามิก
- การแชร์สถานะและยูทิลิตีระหว่างแอประยะไกล