ייבוא ES6 עם פרמטרים

כיצד להעביר פרמטרים למודול ES6 בעת ייבואו

פרמטרים לייבוא ES6

לאחרונה שאלתי את עצמי אם באמת ניתן להשתמש בהצהרות ייבוא מערכת של מודול ES6 ב- Javascript לא רק בדרך המקובלת (ייבוא רק מודול מקומי דרך נתיב יחסי או שם החבילה), אלא עם פרמטרים.

מקרה השימוש שלי יהיה בערך כך: ספק פרמטרים כלשהם במהלך הייבוא, כך שהמודול המיובא יכול להתייחס בעצמו לפרמטרים אלה כדגל לייבוא מותנה או לטיפול בקודים מיוחדים.

כפי שמתברר, זה לגמרי אפשרי!

יבוא ES6 הוא רק כתובות אתרים

לפני שנבדוק את הקוד, חשוב לזכור כי הצהרות ייבוא ב- Node.js הן כמעט רק כתובות אתרים. Node.js כברירת מחדל משתמש באלגוריתם כדי לקבוע כיצד כתובות ה- URL אכן נראות כאשר הן נפתרות במלואן. למשל אם אתה מספק רק את הנתיב היחסי כמפרט הייבוא, Node.js עדיין פותר את המחרוזת לכתובת אתר מוחלטת לייבוא מאחורי הקלעים.

שימוש בפרמטרים של שאילתת URL לצורך ייבוא

ומכיוון שהיבוא מתחיל לכתובת אתר, אנו יכולים להשתמש בפרמטרים הנפוצים של חיפוש כתובות אתרים, כמו גם בשברי כתובות אתרים בייבוא שלנו.

ראשית, ודא כי תומכים במודולי ES6 לבדיקת תכונה זו. זה דורש שינוי קטן בחבילה.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();

השתמש במקרים

הדוגמאות במאמר זה בכוונה קצרות מאוד, אך אתה מבין את הרעיון. בהתאם לדרישות שלך, שימוש בפרמטרים של שאילתות עם יבוא יכול להיות אפשרות אלגנטית למדי לקביעת משתנים "גלובליים" עבור כל מודול. זה מבטל את הצורך לספק גטרים וקובעים כדי להשיג את אותה מטרה.

הצעות

קשור

נספח

שפות