[deno] denonで快適な開発環境を

2 min読了の目安(約1600字TECH技術記事

最近、簡単なプログラムや、趣味の開発でのdenoの使用頻度が上がっています。
ちゃちゃっと何か試したい時にゼロコンフィグでtypescript環境が用意されているUXが気に入ってます。
ただ下記の課題があったので備忘としてzennに初ポストします!

課題

  • denoでもnode js環境のようにnpm scriptsを使いたい
  • ついでにnodemonのようにオートリロード環境も欲しい

package.jsonがない...!

denoではnode_modulesがありません。
node js作者のRyan Dahlが「モジュール用の集中管理されたリポジトリがあるのは残念なことだ」との後悔からだそうです。
つまりモジュールを管理するpackage.jsonがない。

こうなると今までお手軽に使っていたnpm scriptsが使えません。
かつdenoでは環境変数を使うにはサーバー起動時に --allow-envを、ネットワークへアクセスするには --allow-netのように起動時のオプションが多いです。

毎度これらを打つのは骨が折れます。
シェルのrcファイルにエイリアスを仕込む事もできますが、チーム開発時に各々の環境のシェルscriptを書くというのはあまりイケてません。(趣味でやってるので、これを考慮する理由はありませんが...)

そこで見つけたのが denonです。

インストール

deno install --allow-read --allow-run --allow-write --allow-net -f -q --unstable https://deno.land/x/denon@2.4.0/denon.ts

イニシャライズ

初期化のコマンドによって生成ファイルが変わります。

# json denon.json
denon init

# typescript denon.config.ts
denon init --typescript

# yaml denon.yml
denon init --yaml

設定(config.ts)

import { DenonConfig } from "https://deno.land/x/denon@2.3.2/mod.ts";

const config: DenonConfig = {
  scripts: {
    start: {
      cmd: "deno run src/server.ts",
      desc: "run my server.ts file",
      allow: ["env", "net", "read", "write", "plugin"],
      unstable: true,
    },
  },
};

export default config;

エグゼキュート

> denon start
[*] [main] v2.3.2-master
[*] [daem] watching path(s): *.*
[*] [daem] watching extensions: ts,tsx,js,jsx,json
[!] [#0] starting main `deno run --allow-env --allow-net --allow-read --allow-write --allow-plugin --unstable src/server.ts`
Check file:///Users/your_env/your_project/src/server.ts

これで無事deno scriptを使えるようになりました!