ES6 मापदंडों के साथ आयात

आयात करते समय ES6 मॉड्यूल में पैरामीटर कैसे पास करें

ES6-आयात के लिए पैरामीटर्स

मैंने हाल ही में खुद से पूछा कि क्या जावास्क्रिप्ट में ES6-मॉड्यूल सिस्टम इंपोर्ट-स्टेटमेंट का उपयोग न केवल सामान्य तरीके से करना संभव है (सापेक्ष पथ या पैकेज के नाम के माध्यम से सिर्फ एक स्थानीय मॉड्यूल आयात करना), बल्कि मापदंडों के साथ।

मेरा उपयोग मामला कुछ इस तरह होगा: आयात के दौरान कुछ प्रकार के पैरामीटर प्रदान करें ताकि आयातित मॉड्यूल स्वयं उन पैरामीटर को सशर्त आयात या विशेष कोड हैंडलिंग के लिए ध्वज के रूप में मान सके।

जैसा कि यह निकला, यह पूरी तरह से संभव है!

ES6 आयात केवल URL हैं

इससे पहले कि हम कोड पर एक नज़र डालें, यह याद रखना महत्वपूर्ण है कि Node.js में आयात-विवरण व्यावहारिक रूप से केवल URL हैं। Node.js डिफ़ॉल्ट रूप से एक एल्गोरिथ्म का उपयोग यह निर्धारित करने के लिए करता है कि पूरी तरह से हल होने पर URL वास्तव में कैसे दिखते हैं। उदाहरण के लिए यदि आप केवल आयात विनिर्देशक के रूप में सापेक्ष पथ प्रदान करते हैं, तो Node.js अभी भी पर्दे के पीछे के आयात के लिए एक पूर्ण URL के लिए स्ट्रिंग को हल करता है।

आयात के लिए URL क्वेरी पैरामीटर का उपयोग करना

और चूंकि आयात एक URL के लिए हल हो जाता है, इसलिए हम अपने आयात में सामान्य URL खोज पैरामीटर के साथ-साथ URL-टुकड़े का उपयोग कर सकते हैं।

सबसे पहले, सुनिश्चित करें कि इस सुविधा का परीक्षण करने के लिए ES6-मॉड्यूल समर्थित हैं। इसके लिए हमारे package.json में एक छोटे से बदलाव की आवश्यकता है, जहां "टाइप" -फील्ड को "मॉड्यूल" पर सेट करना होगा। ध्यान दें कि आपको Node.js संस्करण 12 या उच्चतर का उपयोग करना होगा।

{
  "name": "es6-import-params",
  "version": "1.0.0",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": ""
}

अगला एक साधारण डेमो के लिए दो न्यूनतम मॉड्यूल परिभाषित करें।

//
// index.js
//

import {greet} from "./lib.js?name=Tom";

// This will print "Hello Tom".
greet();
//
// lib.js
//

// We're using Node's native 'URL'-module
// to transform the provided string into
// a usable representation.
//
// Note that 'import' here isn't part of
// an acutal import, but rather resolved
// to a global variable.
const url = new URL(import.meta.url);

// A simple greeter for demo purposes.
// We just access the map 'searchParams'
// from our usable 'url'-object and use
// a fallback if no params are provided.
export function greet() {
  console.log(`Hello ${url.searchParams.get("name") || "World"}`);
}

विभिन्न मापदंडों के साथ कई आयात

जैसा कि Node.js प्रलेखन में लिखा गया है, प्रत्येक आयात को अन्य मॉड्यूल में तेजी से बाद के आयात के लिए रनटाइम पर कैश किया जाता है। इसलिए यह जानना महत्वपूर्ण है कि एक ही मॉड्यूल से आयात लेकिन अलग-अलग मापदंडों के साथ प्रत्येक को अलग-अलग कैश किया जाता है। बेशक एक मिलान हस्ताक्षर के साथ आयात करता है फिर भी कैश से पढ़ा जाता है।

// 
// index.js
//

// A small adaptation for the index.js
// file, this time importing the same 
// module twice w/ different params. Each
// module gets cached twice, too.
import * as tomLib from "./lib.js?name=Tom";
import * as lukeLib from "./lib.js?name=Luke";

// 'Hello Tom'.
tomLib.greet();
// 'Hello Luke'.
lukeLib.greet();

// Still 'Hello Tom', as it's
// its own module.
tomLib.greet();

बक्सों का इस्तेमाल करें

इस लेख में उदाहरण जानबूझकर बहुत कम हैं, लेकिन आप समझ गए हैं। आपकी आवश्यकताओं के आधार पर, आयात के साथ क्वेरी पैरामीटर का उपयोग करना प्रत्येक मॉड्यूल के लिए "वैश्विक" चर सेट करने के लिए काफी सुंदर विकल्प हो सकता है। यह एक ही लक्ष्य को प्राप्त करने के लिए प्रदाता गेटर्स और सेटर्स की आवश्यकता को समाप्त करता है।

सुझाव

संबंधित

परिशिष्ट

भाषाएँ