https://qiita.com/uki00a/items/817442b00dc8f3b5696d の続き。
deno.landからダウンロードしたモジュールについては、deno_ls_pluginを導入することで、「An import path cannot end with a '. ts'extension...」のエラーを回避できるようになった。
しかし、demを使用してdenopkg.comからdinatraをインストールしようと試みたところ、上記ページと同様の事象が発生してしまった。
$ dem add https://denopkg.com/syumai/dinatra@v0.7.1
前提
Vim等のエディタを利用する場合を想定しています。
vscodeを利用する場合は、vscode-denoプラグインを導入することで解決すると思います。
解決策
typescript-deno-pluginを導入し、tsconfig.jsonで読み込むように設定することで解決する。
$ yarn add -D typescript-deno-plugin typescript
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"baseUrl": ".",
"paths": {
"deno": ["./types/deno.d.ts"],
"https://*": [
"../../../.cache/deno/deps/https/*"
],
"http://*": [
"../../../.cache/deno/deps/http/*"
]
},
"plugins": [{ "name": "typescript-deno-plugin" }]
}
}
導入後、以下のように型定義を解決できるようになった。
原因
demによって作成された./vendor/https/denopkg.com/syumai/dinatra/mod.ts
を確認してみると、「An import path cannot end with a '. ts'extension...」のエラーが発生していた。
export * from 'https://denopkg.com/syumai/dinatra@0.7.1/mod.ts';
試しに、~/.cache/deno/deps/https/denopkg.com/syumai/dinatra@0.7.1
ディレクトリを確認してみたところ、mod.ts
というファイルは存在せず、代わりにmod.ts.headers.json
というファイルが存在した。
内容は下記の通り。
{"redirect_to":"https://raw.githubusercontent.com/syumai/dinatra/0.7.1/mod.ts"}
このmod.ts.headers.json
が正しく解決されていないことが原因であった。
typescript-deno-pluginは、*.headers.json
ファイルが存在する場合、redirect_to
の参照先に従って、型定義を解決する処理が行われているため、このプラグインを導入することで問題が解決した。