emahiro/b.log

日々の勉強の記録とか育児の記録とか。

Import maps in Deno

Summary

以下のマニュアルに書いてある内容。

deno.land

About import maps

deno ではファイル単位の import で依存関係を解決する。

しかし毎回 https://deno.land/std.../server.ts と書くのは面倒くさい。

そこで Import maps を使う。

main.ts と同じ階層に import_map.json を用意して import path をマッピングした設定を記載しておく。

{
   "imports": {
      "http/": "https://deno.land/std/http/"
   }
}

Import maps は deno のアプリを起動するときに importmap のオプション付きで実行することで使うことができるようになる。

$ deno run --allow-net --importmap=import_map.json --unstable main.ts

追記

import map を使っていると Docker build した時に相対 path が解決されないぽいということがわかりました。

docker build -t emahiro-server-app .
Sending build context to Docker daemon  6.144kB
Step 1/9 : FROM hayd/alpine-deno:1.0.2
 ---> 8f192534bc9d
Step 2/9 : EXPOSE 8080
 ---> Running in 040e0f46c354
Removing intermediate container 040e0f46c354
 ---> 93235a5af9db
Step 3/9 : WORKDIR /app
 ---> Running in 0ce7a5e2d58d
Removing intermediate container 0ce7a5e2d58d
 ---> 11c92994ff42
Step 4/9 : USER deno
 ---> Running in 53835c147244
Removing intermediate container 53835c147244
 ---> ab838d2a5833
Step 5/9 : COPY deps.ts .
 ---> a9cf8b680791
Step 6/9 : RUN deno cache deps.ts
 ---> Running in 0b7cb179006d
Compile file:///app/deps.ts
Removing intermediate container 0b7cb179006d
 ---> 623d7d2d90ee
Step 7/9 : COPY . .
 ---> 158e09d31676
Step 8/9 : RUN deno cache main.ts
 ---> Running in 9b0b179277d5
error: relative import path "std/http/server.ts" not prefixed with / or ./ or ../ Imported from "file:///app/main.ts"
The command '/bin/sh -c deno cache main.ts' returned a non-zero code: 1

import_map.json を コンテナ内に copy してもこの相対ぱすを解消できないっぽいです。。。 この先よくわかってない...