Deno の import maps
Deno は import maps をサポートしている
import maps 自体は JavaScript の bare import specifier を動かす仕組み (仕様?)
This allows "bare import specifiers", such as import moment from "moment", to work.
https://github.com/WICG/import-maps#the-basic-idea
Deno では基本的に、以下のような import の書き方は module が解決できないが
code:typescript
import lodash from "lodash";
import react from "react";
deno.json に、import maps を記載しておくことで、module が解決されるようになる
npm: node: なども設定できる
deno.json での "imports" が利用できるのは 1.30.0 以降
それ以前は import_map.json を用意
code:json
{
"imports": {
"lodash": "https://esm.sh/lodash@4.17.21",
"react": "npm:react@^18.0.0"
}
}
この仕組みは Deno のランタイム上での話 (deno.json を利用する必要がある) なので
ライブラリ作成者などは、 import map ではなく deps.ts 使うようにとのこと
実例
Fresh では以下のように使用している
https://github.com/denoland/fresh/blob/main/.vscode/import_map.json
std/testing とかではなく std を設定している
$ の接頭辞をつけているものとつけていないものはどういう区別が?
code:json
{
"scopes": {
"THIS FILE EXISTS ONLY FOR VSCODE! IT IS NOT USED AT RUNTIME": {}
},
"imports": {
"$fresh/": "../",
"twind": "https://esm.sh/twind@0.16.19",
"twind/": "https://esm.sh/twind@0.16.19/",
"preact": "https://esm.sh/preact@10.15.1",
"preact/": "https://esm.sh/preact@10.15.1/",
"preact-render-to-string": "https://esm.sh/*preact-render-to-string@6.1.0",
"@preact/signals": "https://esm.sh/*@preact/signals@1.1.3",
"@preact/signals-core": "https://esm.sh/@preact/signals-core@1.2.3",
"@preact/signals-core@1.2.3": "https://esm.sh/@preact/signals-core@1.2.3",
"@preact/signals-core@1.3.0": "https://esm.sh/@preact/signals-core@1.3.0",
"$std/": "https://deno.land/std@0.190.0/",
"$ga4": "https://raw.githubusercontent.com/denoland/ga4/main/mod.ts"
}
}
利用箇所は こんな感じ
code:typescript
import { assertArrayIncludes, assertEquals } from "$std/testing/asserts.ts";
#Deno #Importmaps