Skip to main content
← ⚑ JavaScript & the browserΒ·Module C3 Β· Lesson 6
TaskAdd an import map that maps the bare specifier 'greet' to a data: URL exporting a single function. Then in <script type='module'>, import greet from 'greet' and log greet('Anna') β€” expect 'hi, Anna'.

Import maps: bare specifiers without a bundler

100 XP8 min
Theory

The bare specifier problem

import _ from "lodash";   // works in Node; FAILS in the browser

The browser doesn't know where "lodash" lives. It needs a full URL. Bundlers solve this by rewriting the specifier to a real path during build.

Import maps β€” the browser-native fix

Shipped in Chrome 89, Safari 16.4, Firefox 108 (and now all evergreens):

<script type="importmap">
{
  "imports": {
    "lodash": "https://cdn.skypack.dev/lodash@4.17.21",
    "lodash/debounce": "https://cdn.skypack.dev/lodash@4.17.21/debounce"
  }
}
</script>

<script type="module">
  import { debounce } from "lodash";   // now resolves to the URL above
</script>

You declare the mapping once; every module specifier respects it. Single source of truth for "what does lodash mean."

When this matters

  • Tiny apps + tools β€” a 50-line demo, an internal admin page. No build step, deploy a single HTML file.
  • Deno / Bun β€” same syntax; import map is the production way.
  • Educational β€” exactly what this lesson does. No Vite, no node_modules, just a browser.

For real apps with hundreds of dependencies, a bundler still wins on tree-shaking, code splitting, and minification. Import maps are the right answer for the small end of the spectrum.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 15 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.