{"id":2901452,"date":"2025-09-02T13:30:54","date_gmt":"2025-09-02T20:30:54","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2901452"},"modified":"2025-09-19T14:14:18","modified_gmt":"2025-09-19T21:14:18","slug":"future-proof-your-arcgis-javascript-app","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app","title":{"rendered":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps"},"author":359942,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191],"tags":[764672,25891,757301,24921,176452],"industry":[],"product":[36831],"class_list":["post-2901452","blog","type-blog","status-publish","format-standard","hentry","category-developers","tag-amd","tag-arcgis","tag-es-modules","tag-javascript","tag-mapping","product-js-api-arcgis"],"acf":{"authors":[{"ID":359942,"user_firstname":"Manoja","user_lastname":"Gadde","nickname":"Manoja Gadde","user_nicename":"mgadde","display_name":"Manoja Gadde","user_email":"mgadde@esri.com","user_url":"","user_registered":"2024-08-06 17:29:05","user_description":"Product Engineer on the ArcGIS Maps SDK for JavaScript. Focused on developer experience, documentation systems, and shaping patterns that help users build better mapping apps\u2014whether they're using web components, modern frameworks, or simple HTML and JS. I\u2019m especially interested in simplifying complex workflows and helping teams ship faster with clarity.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/Image-25-11-23-at-1.16\u202fAM-e1753131657402-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"Learn how $arcgis.import() provides a modern, promise-based approach to loading ArcGIS SDK modules from CDN with future ES module support.","flexible_content":[{"acf_fc_layout":"content","content":"<p>The JavaScript module landscape continues to evolve rapidly. While AMD served CDN-based vanilla JavaScript applications well, <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/arcgis-api-for-javascript-learn-about-es-modules\">ES modules<\/a> are now considered the standard for web-based applications. For example, <a href=\"https:\/\/github.com\/microsoft\/TypeScript\/issues\/54500\" target=\"_blank\" rel=\"noopener noreferrer\">TypeScript has announced plans to deprecate AMD output<\/a> in the future, signaling this broader industry trend.<\/p>\n<p>For developers using the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/\" target=\"_blank\" rel=\"noopener noreferrer\">ArcGIS Maps SDK for JavaScript<\/a> via CDN, this shift brings both opportunities and important considerations.<\/p>\n<p>With version 4.32 of the Javascript Maps SDK, we introduced <code>$arcgis.import()<\/code>, a promise-based API for loading SDK modules in applications built with the <strong data-start=\"567\" data-end=\"574\">CDN<\/strong>. When compared to callback-based AMD approaches, it provides a cleaner syntax for implementing <strong>lazy loading patterns<\/strong> like dynamic and conditional module loading. It works seamlessly with modern <code>async\/await<\/code> patterns while maintaining full compatibility with existing AMD-based applications. It is also designed\u00a0to transparently <strong>support ES modules <\/strong>in the future\u00a0with zero code changes required.<\/p>\n<p>For new CDN-based applications, we recommend using <code data-start=\"464\" data-end=\"482\">$arcgis.import()<\/code> for module loading. While <code data-start=\"509\" data-end=\"520\">require()<\/code> will continue to be supported, <code data-start=\"552\" data-end=\"570\">$arcgis.import()<\/code> is the preferred and future facing approach.<\/p>\n<h3>In this post, you\u2019ll learn:<\/h3>\n<ul>\n<li>How <code>$arcgis.import()<\/code> compares to traditional <code>require()<\/code> patterns<\/li>\n<li>When and why you should adopt this approach<\/li>\n<li>Practical patterns for dynamic and conditional module loading<\/li>\n<li>How this prepares your codebase for future ES module support<\/li>\n<\/ul>\n<h2>Current Module Loading Patterns<\/h2>\n<p>The JavaScript Maps SDK supports three primary consumption patterns:<\/p>\n<h3>NPM + Build Tools (ESM)<\/h3>\n<p>You can install <code>@arcgis\/core<\/code> via\u00a0NPM and use standard ES module syntax with bundlers like Vite, Webpack, or Rollup. Modern frameworks like React, Vue, Svelte, and Angular follow this path, which is already fully ESM.<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\n<span style=\"color: #d73a49\">import<\/span> <span style=\"color: #6f42c1\">WebMap<\/span> <span style=\"color: #d73a49\">from<\/span> <span style=\"color: #032f62\">\"@arcgis\/core\/WebMap.js\"<\/span>;\r\n<span style=\"color: #d73a49\">import<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span> <span style=\"color: #d73a49\">from<\/span> <span style=\"color: #032f62\">\"@arcgis\/core\/layers\/FeatureLayer.js\"<\/span>;\r\n\r\n<\/code><\/pre>\n<h3>CDN with require()<\/h3>\n<p>Load the SDK directly from the Esri CDN using the legacy AMD format and the <code>require()<\/code> function. This continues to be supported but has limitations when it comes to modern JavaScript workflows, especially around code-splitting and dynamic import patterns.<\/p>\n<pre><code>\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">src<\/span>=<span style=\"color: #032f62\">\"https:\/\/js.arcgis.com\/4.33\/\"<\/span>&gt;&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n&lt;<span style=\"color: #22863a\">script<\/span>&gt;\r\n  <span style=\"color: #e36209\">require<\/span>([<span style=\"color: #032f62\">\"esri\/WebMap\"<\/span>, <span style=\"color: #032f62\">\"esri\/layers\/FeatureLayer\"<\/span>], <span style=\"color: #d73a49\">function<\/span> (WebMap, FeatureLayer) {\r\n    <span style=\"color: #d73a49\">const<\/span> map = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">WebMap<\/span>({ <span style=\"color: #005cc5\">basemap<\/span>: <span style=\"color: #032f62\">\"topo-vector\"<\/span> });\r\n    <span style=\"color: #d73a49\">const<\/span> layer = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span>({ <span style=\"color: #005cc5\">url<\/span>: <span style=\"color: #032f62\">\"https:\/\/services.arcgis.com\/P3ePLMYs2RVChkJx\/arcgis\/rest\/services\/ACS_Housing_Tenure_by_Heating_Fuel_Boundaries\/FeatureServer\/1\" <\/span>});\r\n  });\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n\r\n<\/code><\/pre>\n<p>If you&#8217;re developing your application using the AMD modules or an AMD build tool, it is recommended to migrate to using $arcgis.import() or ES modules and modern build tools.\u00a0 See our guide to get started.<\/p>\n<h3>CDN with $arcgis.import<\/h3>\n<p><code>$arcgis.import()<\/code>is a <strong>CDN-hosted only, a promise-based module loader <\/strong>built directly into the SDK. It accepts a single module, or an array of module paths and returns a promise that resolves to the loaded modules.<\/p>\n<pre><code>\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">type<\/span>=<span style=\"color: #032f62\">\"module\"<\/span>&gt;\r\n  <span style=\"color: #d73a49\">const<\/span> [<span style=\"color: #6f42c1\">Map<\/span>, <span style=\"color: #6f42c1\">FeatureLayer<\/span>] = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>([\r\n    <span style=\"color: #032f62\">\"@arcgis\/core\/Map.js\"<\/span>,\r\n    <span style=\"color: #032f62\">\"@arcgis\/core\/layers\/FeatureLayer.js\"<\/span>\r\n  ]);\r\n\r\n  <span style=\"color: #d73a49\">const<\/span> map = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">Map<\/span>({ <span style=\"color: #005cc5\">basemap<\/span>: <span style=\"color: #032f62\">\"topo-vector\"<\/span> });\r\n  <span style=\"color: #d73a49\">const<\/span> layer = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span>({ <span style=\"color: #005cc5\">url<\/span>: <span style=\"color: #032f62\">\"https:\/\/services.arcgis.com\/P3ePLMYs2RVChkJx\/arcgis\/rest\/services\/ACS_Housing_Tenure_by_Heating_Fuel_Boundaries\/FeatureServer\/1\" <\/span>});\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n\r\n<\/code><\/pre>\n<p>Note that it uses the <code>@arcgis\/core\/<\/code> ES modules path format instead of the traditional <code>esri\/<\/code> AMD paths.<\/p>\n<p>Unlike the traditional AMD-based apps that rely on global <code data-start=\"219\" data-end=\"230\">require()<\/code> function, <code data-start=\"329\" data-end=\"347\" data-is-only-node=\"\">$arcgis.import()<\/code>, does not need any global imports. It works seamlessly in modern module environments.<\/p>\n<div>\n<h3>Basic Usage Patterns<\/h3>\n<p><strong>Load a single module:<\/strong><\/p>\n<pre><code>\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">type<\/span>=<span style=\"color: #032f62\">\"module\"<\/span>&gt;\r\n<span style=\"color: #d73a49\">const<\/span> <span style=\"color: #6f42c1\">Graphic<\/span> = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>(<span style=\"color: #032f62\">\"@arcgis\/core\/Graphic.js\"<\/span>);\r\n\r\n<span style=\"color: #d73a49\">const<\/span> graphic = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">Graphic<\/span>({ <span style=\"color: #6a737d\">\/* ... *\/<\/span> });\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n\r\n<\/code><\/pre>\n<p><strong>Load multiple modules together:<\/strong><\/p>\n<pre><code>\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">type<\/span>=<span style=\"color: #032f62\">\"module\"<\/span>&gt;\r\n<span style=\"color: #d73a49\">const<\/span> [<span style=\"color: #6f42c1\">Map<\/span>, <span style=\"color: #6f42c1\">Multipoint<\/span>, <span style=\"color: #6f42c1\">FeatureLayer<\/span>] = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>([\r\n<span style=\"color: #032f62\"> \"@arcgis\/core\/Map.js\"<\/span>,\r\n<span style=\"color: #032f62\"> \"@arcgis\/core\/geometry\/Multipoint.js\"<\/span>,\r\n<span style=\"color: #032f62\"> \"@arcgis\/core\/layers\/FeatureLayer.js\"<\/span>\r\n]);\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n\r\n<\/code><\/pre>\n<h3 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Lazy Loading Scenarios<\/h3>\n<p class=\"whitespace-normal break-words\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">$arcgis.import()<\/code>\u00a0provides cleaner syntax for dynamic and conditional module loading patterns compared to the callback-based AMD approaches. This level of flexibility is hard to achieve with traditional AMD <code>require<\/code> blocks.<\/p>\n<p class=\"whitespace-normal break-words\"><strong>Dynamic module loading <\/strong>ensures that the module is only loaded when needed, improving the initial loading performance of the application. In this example, the FeatureLayer module is loaded dynamically when the user clicks a button.<strong><br \/>\n<\/strong><\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">type<\/span>=<span style=\"color: #032f62\">\"module\"<\/span>&gt;\r\n  <span style=\"color: #d73a49\">document<\/span>.<span style=\"color: #6f42c1\">getElementById<\/span>(<span style=\"color: #032f62\">\"loadButton\"<\/span>).<span style=\"color: #6f42c1\">addEventListener<\/span>(<span style=\"color: #032f62\">\"click\"<\/span>, <span style=\"color: #6f42c1\">async<\/span> () =&gt; {\r\n    <span style=\"color: #d73a49\">const<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span> = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>(<span style=\"color: #032f62\">\"@arcgis\/core\/layers\/FeatureLayer.js\"<\/span>);\r\n    <span style=\"color: #d73a49\">const<\/span> layer = <span style=\"color: #d73a49\">new<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span>({ <span style=\"color: #005cc5\">url<\/span>: <span style=\"color: #032f62\">\"https:\/\/services.arcgis.com\/...\"<\/span> });\r\n    map.<span style=\"color: #6f42c1\">add<\/span>(layer);\r\n  });\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n<\/code><\/pre>\n<p><strong>Conditional module loading<\/strong> enables different modules based on runtime conditions. For example, loading different layers based on map zoom level:<\/p>\n<pre><code style=\"color: #24292e;background: #ffffff;padding: 1em\">\r\n&lt;<span style=\"color: #22863a\">script<\/span> <span style=\"color: #005cc5\">type<\/span>=<span style=\"color: #032f62\">\"module\"<\/span>&gt;\r\n  <span style=\"color: #d73a49\">const<\/span> <span style=\"color: #6f42c1\">Map<\/span> = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>(<span style=\"color: #032f62\">\"@arcgis\/core\/Map.js\"<\/span>);\r\n\r\n  view.<span style=\"color: #6f42c1\">watch<\/span>(<span style=\"color: #032f62\">\"zoom\"<\/span>, <span style=\"color: #6f42c1\">async<\/span> (zoom) =&gt; {\r\n    <span style=\"color: #d73a49\">if<\/span> (zoom &gt; <span style=\"color: #005cc5\">10<\/span>) {\r\n      <span style=\"color: #d73a49\">const<\/span> <span style=\"color: #6f42c1\">FeatureLayer<\/span> = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>(<span style=\"color: #032f62\">\"@arcgis\/core\/layers\/FeatureLayer.js\"<\/span>);\r\n      <span style=\"color: #6a737d\">\/\/ Load city-level layer<\/span>\r\n    } <span style=\"color: #d73a49\">else<\/span> {\r\n      <span style=\"color: #d73a49\">const<\/span> GraphicsLayer = <span style=\"color: #d73a49\">await<\/span> $arcgis.<span style=\"color: #d73a49\">import<\/span>(<span style=\"color: #032f62\">\"@arcgis\/core\/layers\/GraphicsLayer.js\"<\/span>);\r\n      <span style=\"color: #6a737d\">\/\/ Load country-level layer<\/span>\r\n    }\r\n  });\r\n&lt;\/<span style=\"color: #22863a\">script<\/span>&gt;\r\n<\/code><\/pre>\n<h2 class=\"text-xl font-bold text-text-100 mt-1 -mb-0.5\">Migration Path<\/h2>\n<p class=\"whitespace-normal break-words\">If you&#8217;re using the CDN with <code>require()<\/code>, now is a good time to start using <code>$arcgis.import()<\/code>. It coexists with <code>require()<\/code>, so you can migrate incrementally.<\/p>\n<p class=\"whitespace-normal break-words\">The migration is straightforward:<\/p>\n<ul class=\"[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7\">\n<li class=\"whitespace-normal break-words\">Replace <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">require()<\/code> callbacks with <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">await $arcgis.import()<\/code><\/li>\n<li class=\"whitespace-normal break-words\">Use array destructuring for loaded modules<\/li>\n<li class=\"whitespace-normal break-words\">Add <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">type=\"module\"<\/code> to script tags<\/li>\n<li class=\"whitespace-normal break-words\">Replace error callbacks with try\/catch blocks<\/li>\n<\/ul>\n<p><strong>Next steps<\/strong><\/p>\n<ul>\n<li>Try out <code>$arcgis.import()<\/code> in your CDN-based apps<\/li>\n<li>Use it to load modules dynamically based on user interaction or route changes<\/li>\n<li>Check out our updated <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/sample-code\/\" target=\"_blank\" rel=\"noopener noreferrer\">samples<\/a> that demonstrate this pattern<\/li>\n<\/ul>\n<p><strong>Looking Forward<\/strong><\/p>\n<\/div>\n<div>\n<p>Whether you&#8217;re maintaining a legacy application or building the next big civic mapping tool, <code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">$arcgis.import()<\/code> bridges current AMD patterns with future ES module support.<\/p>\n<p>Let us know how you&#8217;re using <code>$arcgis.import()<\/code> in your apps and what you&#8217;d like to see next<\/p>\n<p><strong>Further reading<\/strong><\/p>\n<ul>\n<li>See the <a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/4.32\/#module-loading-via-cdn\" target=\"_blank\" rel=\"noopener noreferrer\">4.32 release notes<\/a> for official details about $arcgis.import().<\/li>\n<li><a href=\"https:\/\/developers.arcgis.com\/javascript\/latest\/get-started\/#npm\">Get started<\/a> with Arcgis Maps SDK for JavaScript.<\/li>\n<\/ul>\n<\/div>\n"}],"related_articles":"","show_article_image":true,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/09\/card-2.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/cropped-banner-1.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-19T21:14:18+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\"},\"author\":{\"name\":\"Manoja Gadde\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f73d30c046cd6effd4c38fe91c92e4a3\"},\"headline\":\"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps\",\"datePublished\":\"2025-09-02T20:30:54+00:00\",\"dateModified\":\"2025-09-19T21:14:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\"},\"wordCount\":14,\"commentCount\":3,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"amd\",\"ArcGIS\",\"ES Modules\",\"JavaScript\",\"mapping\"],\"articleSection\":[\"Developers\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\",\"name\":\"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2025-09-02T20:30:54+00:00\",\"dateModified\":\"2025-09-19T21:14:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f73d30c046cd6effd4c38fe91c92e4a3\",\"name\":\"Manoja Gadde\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/Image-25-11-23-at-1.16\u202fAM-e1753131657402-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/Image-25-11-23-at-1.16\u202fAM-e1753131657402-213x200.jpg\",\"caption\":\"Manoja Gadde\"},\"description\":\"Product Engineer on the ArcGIS Maps SDK for JavaScript. Focused on developer experience, documentation systems, and shaping patterns that help users build better mapping apps\u2014whether they're using web components, modern frameworks, or simple HTML and JS. I\u2019m especially interested in simplifying complex workflows and helping teams ship faster with clarity.\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/mgadde\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app","og_locale":"en_US","og_type":"article","og_title":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2025-09-19T21:14:18+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app"},"author":{"name":"Manoja Gadde","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f73d30c046cd6effd4c38fe91c92e4a3"},"headline":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps","datePublished":"2025-09-02T20:30:54+00:00","dateModified":"2025-09-19T21:14:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app"},"wordCount":14,"commentCount":3,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["amd","ArcGIS","ES Modules","JavaScript","mapping"],"articleSection":["Developers"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app","name":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2025-09-02T20:30:54+00:00","dateModified":"2025-09-19T21:14:18+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/js-api-arcgis\/developers\/future-proof-your-arcgis-javascript-app#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Using $arcgis.import(): Simplify Module Loading in ArcGIS Maps SDK for JavaScript CDN Apps"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f73d30c046cd6effd4c38fe91c92e4a3","name":"Manoja Gadde","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/Image-25-11-23-at-1.16\u202fAM-e1753131657402-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/Image-25-11-23-at-1.16\u202fAM-e1753131657402-213x200.jpg","caption":"Manoja Gadde"},"description":"Product Engineer on the ArcGIS Maps SDK for JavaScript. Focused on developer experience, documentation systems, and shaping patterns that help users build better mapping apps\u2014whether they're using web components, modern frameworks, or simple HTML and JS. I\u2019m especially interested in simplifying complex workflows and helping teams ship faster with clarity.","url":"https:\/\/www.esri.com\/arcgis-blog\/author\/mgadde"}]}},"text_date":"September 2, 2025","author_name":"Manoja Gadde","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/mgadde","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/07\/cropped-banner-1.png","primary_product":"ArcGIS Maps SDK for JavaScript","tag_data":[{"term_id":764672,"name":"amd","slug":"amd","term_group":0,"term_taxonomy_id":764672,"taxonomy":"post_tag","description":"","parent":0,"count":2,"filter":"raw"},{"term_id":25891,"name":"ArcGIS","slug":"arcgis","term_group":0,"term_taxonomy_id":25891,"taxonomy":"post_tag","description":"","parent":0,"count":207,"filter":"raw"},{"term_id":757301,"name":"ES Modules","slug":"es-modules","term_group":0,"term_taxonomy_id":757301,"taxonomy":"post_tag","description":"","parent":0,"count":4,"filter":"raw"},{"term_id":24921,"name":"JavaScript","slug":"javascript","term_group":0,"term_taxonomy_id":24921,"taxonomy":"post_tag","description":"","parent":0,"count":151,"filter":"raw"},{"term_id":176452,"name":"mapping","slug":"mapping","term_group":0,"term_taxonomy_id":176452,"taxonomy":"post_tag","description":"","parent":0,"count":60,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":420,"filter":"raw"}],"product_data":[{"term_id":36831,"name":"ArcGIS Maps SDK for JavaScript","slug":"js-api-arcgis","term_group":0,"term_taxonomy_id":36831,"taxonomy":"product","description":"","parent":36601,"count":361,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=js-api-arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2901452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/359942"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2901452"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2901452\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2901452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2901452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2901452"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2901452"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2901452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}