← Back to JavaScript Course | Chapter 4: Modern JS, Async & DOM | Lesson 15 of 26

JS मॉड्यूल्स

अलग-अलग departments वाली किसी company के बारे में सोचें, accounting, marketing, shipping, हर एक अपना काम अलग से संभालता है, पर ज़रूरत पड़ने पर एक-दूसरे के साथ खास reports और resources साझा करता है। JavaScript modules आपको code को अलग-अलग files में बांटने देते हैं जो वैसे ही काम करती हैं, हर file, या module, अपनी logic का हिस्सा संभालता है और explicitly सिर्फ वही हिस्से साझा, यानी export, करता है जिन्हें दूसरी files को असल में import और इस्तेमाल करना है। जैसे-जैसे कोई project बढ़ता है, modules code को organized और manageable रखते हैं, बिल्कुल वैसी structure जो cookiescursor.com जैसे बड़े applications को maintainable बनाए रखने में मदद करती है।
Syntax
javascript
export const name = value;
export default value;

import { name } from "./file.js";
import defaultName from "./file.js";

export और import की बुनियादी बातें

export किसी function, variable, या class को दूसरी files के इस्तेमाल के लिए उपलब्ध बना देता है, और import उस exported item को किसी दूसरी file में लाता है ताकि वहाँ भी इस्तेमाल हो सके।

Note: export को किसी file से 'कुछ public बनाना' समझें, और import को किसी दूसरी file से 'कुछ public मांगना'।
Warning: जो value explicitly export नहीं की गई है वह अपनी file के लिए पूरी तरह private रहती है, दूसरे modules उसे बिल्कुल भी access नहीं कर सकते।

उदाहरण: export and import Basics

javascript
// math.js
export function add(a, b) { return a + b; }

// main.js
import { add } from './math.js';
console.log(add(2, 3));

Default Exports

एक default export किसी module की मुख्य चीज़ को represent करता है, और इसे बिना curly braces के import किया जाता है, importing file जो भी नाम चुने उसके साथ।

एक file में सिर्फ एक ही default export हो सकता है, इसीलिए इसे आमतौर पर किसी module के primary function, class, या component के लिए इस्तेमाल किया जाता है।

Note: एक file में ज़्यादा से ज़्यादा एक ही default export हो सकता है, इसे उस primary चीज़ के लिए रखें जिसे provide करने की ज़िम्मेदारी उस file की है।
Warning: चूंकि importing file किसी default import को जो चाहे नाम दे सकती है, पूरे project में असंगत नामकरण code को समझना मुश्किल बना सकता है।

उदाहरण: Default Exports

javascript
// user.js
export default function createUser(name) { return { name }; }

// main.js
import createUser from './user.js';
console.log(createUser("Sam"));

Named Exports

Named exports एक single file को कई distinct values export करने देते हैं, हर एक को उसके exact exported name से अलग-अलग import किया जाता है, importing side पर curly braces में लपेटा हुआ। एक module एक single default export के साथ कई named exports को बेझिझक मिला सकता है।

Note: Named exports ऐसी utility files के लिए आदर्श हैं जो कई संबंधित, independent functions देती हैं जिन्हें consumers चुनकर import कर सकते हैं।
Warning: Named imports को exported name से बिल्कुल मेल खाना चाहिए, जब तक कि import के दौरान as keyword से explicitly rename न किया जाए।

उदाहरण: Named Exports

javascript
// utils.js
export const PI = 3.14;
export function double(n) { return n * 2; }

// main.js
import { PI, double } from './utils.js';
console.log(PI, double(5));

Script Tag में type="module" इस्तेमाल करना

किसी script tag में type=module जोड़ना browser को उस script को एक ES module की तरह treat करने के लिए कहता है, जो import और export syntax को सक्षम करता है, और script को page parse होने तक अपने आप defer कर देता है।

Note: Module scripts defer attribute की तरह अपने आप defer हो जाते हैं, इसलिए आपको किसी module script पर अलग से defer जोड़ने की ज़रूरत नहीं।
Warning: Module scripts के लिए page का http:// या https:// पर serve होना ज़रूरी है, file system से सीधे किसी HTML file को खोलना आमतौर पर module imports को block कर देता है।

उदाहरण: Using type="module" in a Script Tag

javascript
<script type="module">
  // Import `{ add }` from the `./math.js` module
  import { add } from './math.js';
  // Print `add(1, 2)` to the console
  console.log(add(1, 2));
</script>

Module Scope

हर module का अपना private top-level scope होता है, यानी एक module file में declared variables और functions दूसरी file में अपने आप दिखाई नहीं देते, जब तक कि उन्हें explicitly export और import न किया जाए।

Note: Module scope स्वाभाविक रूप से global scope को गंदा होने से बचाता है, यह उन पुराने तरीकों के मुकाबले एक बड़ा फायदा है जो कई plain script tags पर निर्भर थे जो एक ही global namespace साझा करते थे।
Warning: दो modules बिना किसी conflict के बिल्कुल एक जैसे नाम वाले variables safely declare कर सकते हैं, क्योंकि हर module का top-level scope पूरी तरह अलग होता है।

उदाहरण: Module Scope

javascript
// counter.js
let count = 0; // private to this module, not visible elsewhere
export function increment() { return ++count; }
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. script tag में type=module जोड़ना भूल जाना, इसके बिना export और import statements एक syntax error throw करते हैं।
  2. default exports और named exports को मिला देना, उनका import syntax अलग है और उन्हें एक-दूसरे की जगह इस्तेमाल नहीं किया जा सकता।
  3. बिना server के local file system से सीधे किसी module को load करने की कोशिश करना, browsers security कारणों से file:// protocol पर module imports block कर देते हैं।
चैप्टर सारांश
  • export किसी function, variable, या class को दूसरी files के लिए उपलब्ध कराता है, और import उसे उस दूसरी file में लाता है जिसे उसकी ज़रूरत है।
  • एक default export किसी module की मुख्य चीज़ होती है, जबकि named exports एक file से कई अलग-अलग exports allow करते हैं।
  • import और export इस्तेमाल करने के लिए script tag में type=module जोड़ना ज़रूरी है, और modules automatically अपने खुद के private scope में चलते हैं।
ब्राउज़र सपोर्ट

type=module वाले native ES modules को लगभग 2018 से सभी major browsers में support मिला है और अब यह web platform का पूरी तरह standard हिस्सा है।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.