## 経緯 [[Deno]]のv2がリリースされた。 <div class="link-card-v2"> <div class="link-card-v2-site"> <span class="link-card-v2-site-name">Deno Blog</span> </div> <div class="link-card-v2-title"> Announcing Deno 2 </div> <div class="link-card-v2-content"> Our next major version of Deno combines the simplicity, security, and performance of Deno 1 with full Node and n ... </div> <a href="https://deno.com/blog/v2.0"></a> </div> 特に以下の点が気になったので実際に試してみる。 - `package.json`と`node_modules`のプロジェクト構成に公式としてサポート - パッケージインストールが[[Bun]]より高速らしい - [比較表](https://deno.com/blog/v2.0/package-install-timings.png) ## 環境 ```console $ cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.4 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.4 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy $ deno --version deno 1.45.5 (release, x86_64-unknown-linux-gnu) v8 12.7.224.13 typescript 5.5.2 ``` ## Denoのバージョンアップ [[mise]]でバージョンアップする。 ```console $ mise up deno mise [email protected] ✓ installed mise [email protected] ✓ removing ~/.local/share/mise/installs/deno/1.45.5 $ deno --version deno 2.0.2 (stable, release, x86_64-unknown-linux-gnu) v8 12.9.202.13-rusty typescript 5.6.2 ``` ## プロジェクト作成 適当にプロジェクトを作成してみる。適当に `minerva-test` という名前にする。 ```console $ deno init minerva-test ✅ Project initialized Run these commands to get started cd minerva-test # Run the program deno run main.ts # Run the program and watch for file changes deno task dev # Run the tests deno test ``` 案内にしたがって一通りコマンドを実行してみる。 ```console cd minerva-test deno run main.ts deno task dev deno test ``` 普通に `init` すると `deno.json` が作成されるらしい。 ## 依存packageの追加 依存関係なしだとアレなので、[[🦉Owlelia]]を依存関係に追加してみる。 ```console deno add npm:owlelia ``` `main.ts`で使ってみる。 ```ts import { DateTime } from "owlelia"; if (import.meta.main) { console.log(DateTime.now().displayDate); } ``` ```console $ deno run main.ts 2024-10-19 ``` 依存関係は `deno.json` に追加されていた。 ```json { "tasks": { "dev": "deno run --watch main.ts" }, "imports": { "@std/assert": "jsr:@std/assert@1", "owlelia": "npm:owlelia@^0.48.1" } } ``` ### node_modulesとして追加 [[Deno]] v2からは`node_modules`に対応しているはずなので試してみる。そのためには `deno.json` の削除が恐らく必要。 ```console rm deno.* ``` その上で `package.json` を追加する。`npm init -y`で追加。 ```json { "name": "minerva-test", "version": "1.0.0", "main": "index.js", "scripts": { "dev": "deno run --watch main.ts" }, "keywords": [], "author": "", "license": "ISC", "description": "" } ``` そして、依存関係を追加。`npm:`のprefixは必要らしい。 ```console deno add npm:owlelia ``` 先ほどとは違って、`package.json`の`dependencies`に追加され、`node_modules`ディレクトリが作成されて、追加した依存関係がインストールされている。ただし、パッケージの実体は[[シンボリックリンク]]になってそう。 ```console $ tree  . ├──  main.ts ├──  main_test.ts ├──  node_modules │ └──  owlelia -> .deno/[email protected]/node_modules/owlelia └──  package.json ``` > [!thinking] 個人的には[[Deno]]を使うなら`deno.json`でいいと思う。そうでないと[[nvim-lspconfig]]が[[Deno]]プロジェクトであることを把握できないし、[[TypeScript]]の依存関係がない[[Node.js]]プロジェクトをつくるのは完全な互換ではないし...