🦕

Deno 1.38が出た!

2023/11/03に公開

Deno 1.38がリリースされました!
今まで通り

deno upgrade

でアップデートできます。

その一部の機能をご紹介します!

HMR!!

HMRです!Viteとかであるモジュールをスムーズに置き換えられるあれです!
それがDenoでできるようになるんです!

例えば、main.tsを以下のようにします。

import { countUp } from './count.ts'

setInterval(() => {
  console.log(countUp())
}, 1000)

addEventListener('hmr', () => {
  console.log('HMRが実行されました!')
})

count.tsです

let count = 0
export const countUp = () => {
  count += 1
  return count
}

普通に実行すると、数字が1秒に一回、1ずつ上がっていきますね。
これを

deno run --unstable-hmr main.ts

として実行します。そうすると、カウントがアップしていきます。

その状態で、count.ts

let count = 0
export const countUp = () => {
  count += 2
  return count
}

のようにカウントアップの速度を上げてみます。そして保存すると、メッセージが表示されます。
すると、カウントの状態が保持されたままで速度が上がるはずです!すごい!

windowのhmrイベントで変更をキャッチできるようです。
--unstable-とついているように、不安定な機能のようです。

これは、denoland/deno#20876で実装されたようです。

.envの読み込み

.envのような環境変数ファイルをDenoはサポートしておらず、外部ライブラリや自分で実装しなければなりませんでしたが、ネイティブでサポートされます!

deno run --env main.ts

のようにすると、Deno.env.envの内容が取得できます!

VSCode拡張

VSCodeのLSPも更新されたようです。

外部モジュールのキャッシュ

今まで、Denoのhttpによる外部のモジュールの補完を使用するには、そのモジュールのキャッシュが存在する必要がありました。
今まで読み込んだことのないモジュールをimportすると、Module Not Foundとなってしまいます。
これを解決するには、一度プログラムをキャッシュしてDenoにキャッシュしてもらう必要がありました。これが解決します!

VSCodeのクイックフィックスを使用して、VSCodeからキャッシュできるようになりました!

deno.jsonのtasksのプレビュー

package.jsonのscriptsは、サイドバーでプレビューできます。
同じように、deno.jsonのtasksを、サイドバーでプレビューできるようになりました!

これにより、よりわかりやすくなります。

より簡単にNode.jsのプロジェクトを実行できるように

より簡単にNode.jsのプロジェクトを実行できるようになりました!

既存のNode.jsプロジェクトに以下のようなdeno.jsonを作成します。

{
  "unstable": ["byonm"]
}

すると、その中では、Node.jsのようなモジュール管理でDenoが動作します。

具体的には、

  • npm iしないとModule not found
  • import npmModule from 'npm:npmModule'import npmModule from 'npmModule'と書ける

ようになります!Node.jsからの移行が簡単になりそうですね!

EventSourceの実装

Server Sent Events(httpを用いて、サーバーから一方向でストリーミングを受けれるやつ)があります。

ブラウザには、そのクライアントとして、EventSourceがありますが、それはDenoにないため、x/eventsourceのようなポリフィルを使う必要がありました。

それが、ネイティブに実装されました!
使い方は、Web標準のEventSourceと同じようです

まとめ

色々な機能が実装されました!その中でも、私が興味深いと思ったものを抜粋しました。

もっと色々な機能があるので、知りたかったらリリースノートを読んでみてください!
https://deno.com/blog/v1.38

GitHubで編集を提案

Discussion