இம்போர்ட் மேப்ஸ் உடன் மேம்பட்ட JavaScript மாட்யூல் தீர்மானத்தைத் திறக்கவும். டைனாமிக் ரன்டைம் பாதை மாற்றம் A/B சோதனை, மைக்ரோ-ஃபிரண்ட்எண்ட்ஸ், நெகிழ்வான பயன்பாட்டு வடிவமைப்பை உலகளவில் செயல்படுத்துகிறது.
JavaScript Import Maps டைனமிக் தீர்மானம்: ரன்டைம் மாட்யூல் பாதை மாற்றியமைப்பைப் புரட்சிகரமாக்குதல்
விரிவடைந்து, எப்போதும் மாறிவரும் வலை மேம்பாட்டு நிலப்பரப்பில், ஸ்கேலபிள் (scalable), பராமரிக்கக்கூடிய (maintainable) மற்றும் வலுவான (robust) பயன்பாடுகளை உருவாக்குவதற்கான அடித்தளமாக ஜாவாஸ்கிரிப்ட் மாட்யூல்கள் மாறியுள்ளன. எளிய ஸ்கிரிப்ட் குறிச்சொற்களுடன் (script tags) அவற்றின் ஆரம்ப நாட்களிலிருந்து CommonJS மற்றும் AMD-யின் சிக்கலான உருவாக்க செயல்முறைகள் வரை, இறுதியாக ES மாட்யூல்களின் தரப்படுத்தப்பட்ட நேர்த்தியுடன், மாட்யூல் மேலாண்மையின் பயணம் தொடர்ச்சியான கண்டுபிடிப்புகளின் ஒன்றாகும். இருப்பினும், ES மாட்யூல்கள் இருந்தாலும், ஒரு பயன்பாடு ஒரு சார்புநிலையை எங்கு கண்டுபிடிப்பது என்று சொல்லும் அந்த சரங்களான மாட்யூல் விவரக்குறிப்பாளர்கள் (module specifiers) எவ்வாறு தீர்க்கப்படுகின்றன என்பது தொடர்பான சவால்களை டெவலப்பர்கள் அடிக்கடி சந்திக்கின்றனர். குறிப்பாக `import 'lodash';` போன்ற "வெறும் விவரக்குறிப்பாளர்கள்" (bare specifiers) அல்லது `import 'my-library/utils/helpers';` போன்ற ஆழமான பாதைகளுக்கு இது உண்மையாகும், இதற்கு வரலாற்று ரீதியாக அதிநவீன உருவாக்கக் கருவிகள் (build tools) அல்லது சர்வர்-பக்க மேப்பிங் (server-side mapping) தேவைப்பட்டது.
இங்கே JavaScript Import Maps நுழைகின்றன. ஒப்பீட்டளவில் புதிய, ஆனால் ஆழமான தாக்கத்தை ஏற்படுத்தும் ஒரு வலை தள அம்சம், இம்போர்ட் மேப்ஸ் மாட்யூல் விவரக்குறிப்பாளர்கள் எவ்வாறு தீர்க்கப்படுகின்றன என்பதைக் கட்டுப்படுத்த ஒரு சொந்த உலாவி வழிமுறையை (native browser mechanism) வழங்குகிறது. அவற்றின் ஸ்டேடிக் கட்டமைப்புத் திறன்கள் (static configuration capabilities) சக்திவாய்ந்ததாக இருந்தாலும், உண்மையான விளையாட்டு மாற்றும் அம்சம் அவற்றின் டைனமிக் தீர்மானத்தை (dynamic resolution) மற்றும் ரன்டைம் மாட்யூல் பாதை மாற்றியமைப்பை (runtime module path modification) எளிதாக்கும் திறனில் உள்ளது. இந்தத் திறனானது நெகிழ்வுத்தன்மையின் ஒரு முற்றிலும் புதிய பரிமாணத்தைத் திறக்கிறது, இது டெவலப்பர்களை அவர்களின் முழு பயன்பாட்டையும் மீண்டும் தொகுக்காமல் (re-bundle) அல்லது மீண்டும் வரிசைப்படுத்தாமல் (redeploy) எண்ணற்ற ரன்டைம் நிலைமைகளின் அடிப்படையில் மாட்யூல் ஏற்றத்தை (module loading) மாற்றியமைக்க அதிகாரம் அளிக்கிறது. பல்வேறு பயன்பாடுகளை உருவாக்கும் உலகளாவிய பார்வையாளர்களுக்கு, இந்த அம்சத்தைப் புரிந்துகொள்வதும் பயன்படுத்துவதும் இனி ஒரு ஆடம்பரம் அல்ல, மாறாக ஒரு மூலோபாயக் கட்டாயமாகும்.
வலை சூழலமைப்பில் மாட்யூல் தீர்மானத்தின் நீடித்த சவால்
பல தசாப்தங்களாக, ஜாவாஸ்கிரிப்ட் பயன்பாடுகளில் சார்புநிலைகளை (dependencies) நிர்வகிப்பது சக்தி மற்றும் வலியின் ஆதாரமாக இருந்து வருகிறது. ஆரம்பகால வலை மேம்பாடு ஸ்கிரிப்ட் கோப்புகளை ஒன்றிணைப்பதையோ அல்லது உலகளாவிய மாறிகளைப் (global variables) பயன்படுத்துவதையோ நம்பியிருந்தது, இது பெயர் மோதல்கள் (naming collisions) மற்றும் கடினமான சார்புநிலை மேலாண்மையால் நிறைந்த ஒரு நடைமுறையாகும். CommonJS (Node.js) போன்ற சர்வர்-பக்க தீர்வுகள் மற்றும் AMD (RequireJS) போன்ற கிளையன்ட்-பக்க ஏற்றிகள் (client-side loaders) கட்டமைப்பைக் கொண்டு வந்தன, ஆனால் பெரும்பாலும் மேம்பாடு மற்றும் தயாரிப்பு சூழல்களுக்கு இடையில் ஒரு வேறுபாட்டை அறிமுகப்படுத்தின, இது சிக்கலான உருவாக்க படிகளை (build steps) அவசியமாக்கியது.
உலாவிகளில் சொந்த ES மாட்யூல்கள் (ESM) அறிமுகப்படுத்தப்பட்டது ஒரு மகத்தான படியாகும். இது ஒரு தரப்படுத்தப்பட்ட, அறிவிப்பு சார்ந்த தொடரியல் (`import` மற்றும் `export`) வழங்கியது, இது மாட்யூல் மேலாண்மையை நேரடியாக உலாவியில் கொண்டு வந்தது, பல பயன்பாட்டு நிகழ்வுகளுக்கு தொகுப்பாளர்கள் (bundlers) விருப்பமானதாக மாறும் எதிர்காலத்திற்கு உறுதியளித்தது. இருப்பினும், ESM ஆனது "வெறும் விவரக்குறிப்பாளர்கள்" (bare specifiers) சிக்கலை இயல்பாகவே தீர்க்கவில்லை. நீங்கள் `import 'my-library';` என்று எழுதும்போது, 'my-library' ஐ கோப்பு முறைமையில் அல்லது நெட்வொர்க்கில் எங்கு கண்டுபிடிப்பது என்று உலாவிக்குத் தெரியாது. இது ஒரு முழு URL அல்லது ஒரு தொடர்புடைய பாதையை (relative path) எதிர்பார்க்கிறது.
இந்த இடைவெளி Webpack, Rollup மற்றும் Parcel போன்ற மாட்யூல் பண்ட்லர்களை (module bundlers) தொடர்ந்து நம்பியிருக்க வழிவகுத்தது. வெறும் விவரக்குறிப்பாளர்களை தீர்க்கக்கூடிய பாதைகளாக மாற்றுவதற்கும், குறியீட்டை மேம்படுத்துவதற்கும், ட்ரீ-ஷேக்கிங் செய்வதற்கும் மற்றும் பலவற்றிற்கும் இந்த கருவிகள் இன்றியமையாதவை. நம்பமுடியாத சக்திவாய்ந்ததாக இருந்தாலும், பண்ட்லர்கள் சிக்கலைச் சேர்க்கின்றன, உருவாக்க நேரத்தை அதிகரிக்கின்றன, மேலும் மூல குறியீடுக்கும் (source code) அதன் வரிசைப்படுத்தப்பட்ட வடிவத்திற்கும் இடையிலான நேரடி உறவை பெரும்பாலும் மறைக்கின்றன. தீவிர நெகிழ்வுத்தன்மை அல்லது ரன்டைம் தகவமைப்பு தேவைப்படும் சூழ்நிலைகளுக்கு, பண்ட்லர்கள் ஒரு நிலையான தீர்மான மாதிரியை (static resolution model) வழங்குகின்றன, இது வரம்புக்குட்பட்டதாக இருக்கலாம்.
ஜாவாஸ்கிரிப்ட் இம்போர்ட் மேப்ஸ் என்றால் என்ன?
ஜாவாஸ்கிரிப்ட் இம்போர்ட் மேப்ஸ் என்பது ஒரு வலை பயன்பாட்டில் மாட்யூல் விவரக்குறிப்பாளர்களின் (module specifiers) தீர்மானத்தைக் கட்டுப்படுத்த டெவலப்பர்களை அனுமதிக்கும் ஒரு அறிவிப்பு வழிமுறை (declarative mechanism) ஆகும். அவற்றை மாட்யூல் பாதைகளுக்கான கிளையன்ட்-பக்க `package.json` அல்லது உலாவியின் உள்ளமைக்கப்பட்ட மாற்றுப்பெயர் அமைப்பு (alias system) என்று நினைக்கலாம். அவை உங்கள் HTML ஆவணத்தில், பொதுவாக `
` பிரிவில், ஒரு `