On this page
Import Maps
In order for Deno to resolve a bare specifier like "react"
or "lodash"
, it
needs to be told where to look for it. Does "lodash"
refer to an module in our
project or does it refer to a third party dependency? Deno needs to know where
to resolve the import specifier lodash
to.
import lodash from "lodash";
We can point Deno to the lodash
package on npm, for example, by adding it to
the "imports"
section in deno.json
.
{
"imports": {
"lodash": "npm:lodash@^4.17"
}
}
The "imports"
section in deno.json
is often referred to as an import map
that is based on the
Import Maps Standard.
You may have seen Node and npm use package.json
and the node_modules
folder
to do similar package resolution.
The deno.json
file is auto-discovered and acts (among other things) as an
import map.
Read more about deno.json
here.
Using third party modules is explained further in ECMAScript Modules.
Custom path mappings Jump to heading
The import map in deno.json
can be used for more general path mapping of
specifiers. You can map an exact specifiers to a third party module or a file
directly, or you can map a part of an import specifier to a directory.
{
"imports": {
// Map to an exact file
"foo": "./some/long/path/foo.ts",
// Map to a directory, usage: "bar/file.ts"
"bar/": "./some/folder/bar/"
}
}
Usage:
import * as foo from "foo";
import * as bar from "bar/file.ts";
Path mapping of import specifies is commonly used in larger code bases for brevity.
To use your project root for absolute imports:
{
"imports": {
"/": "./",
"./": "./"
}
}
import { MyUtil } from "/util.ts";
This causes import specifiers starting with /
to be resolved relative to the
import map's URL or file path.