## 経緯
[[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]]プロジェクトをつくるのは完全な互換ではないし...