## 経緯 [[Deno]]のv2.5がリリースされた。 <div class="link-card-v2"> <div class="link-card-v2-site"> <span class="link-card-v2-site-name">Deno</span> </div> <div class="link-card-v2-title"> Deno 2.5: Permissions in the config file | Deno </div> <div class="link-card-v2-content"> Simpler permission management with permission sets, new Deno.test APIs for setting up and tearing down test case ... </div> <a href="https://deno.com/blog/v2.5"></a> </div> 気になるものだけ試してみる。 ## Permission sets in config https://deno.com/blog/v2.5#permission-sets-in-config `deno.json` に `permissions` が設定できるようになった。 `deno.json` ```json { "tasks": { "dev": "deno run -A --watch main.ts" }, "imports": { "@std/assert": "jsr:@std/assert@1" }, "permissions": { "default": { "read": [ "./data.csv" ] }, "read-all": { "read": true } } } ``` ```bash # defaultのパーミッションを利用 deno run -P main.ts # 指定したkeyのパーミッションを利用 deno run -P=read-all main.ts ``` ## `deno run` lists all tasks and scripts https://deno.com/blog/v2.5#deno-run-lists-all-tasks-and-scripts `deno.json` でこんな風にコマンド定義していると ```json { "tasks": { "dev": "deno run -A --watch main.ts", "build": "deno build main.ts" } } ``` `deno run` コマンドで内訳が見られるようになった。 ```console $ deno run Please specify a [SCRIPT_ARG] or a task name. Available tasks: - dev deno run -A --watch main.ts - build deno build main.ts ``` ## HTML entrypoint support in `deno bundle` https://deno.com/blog/v2.5#html-entrypoint-support-in-deno-bundle [[deno bundle]] で[[HTML]]ファイルをエントリポイントに指定できるようになった。 `sub.ts` ```ts export function sum(x: number, y: number): number { return x + y; } ``` `main.ts` ```ts import { parse } from "@std/csv"; import { sum } from "./sub.ts"; const r = parse(await Deno.readTextFile("data.csv"), { skipFirstRow: true }); console.log(sum(r.length, 1000000)); ``` `index.html` ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Example</title> <script src="./main.ts" type="module"></script> </head> </html> ``` という3ファイルがあり ``` . ├── data.csv ├── deno.json ├── deno.lock ├── index.html ├── main.ts └── sub.ts ``` という状態で ```console deno bundle --outdir dist index.html ``` と実行すると ``` dist ├── index-625EFEH4.js └── index.html ``` のようにbundleされる。[[JavaScript]]ファイルは1つになる。 ## Dependency management https://deno.com/blog/v2.5#dependency-management [[deno install]]コマンドのレポートが強化された。 ```console $ deno install jsr:@std/csv Add jsr:@std/[email protected] Installed 1 package in 895ms Reused 5 packages from cache +++++ Downloaded 1 package from JSR + Downloaded 0 packages from npm Dependencies: + jsr:@std/csv 1.0.6 ``` ## `no-unversioned-import` lint rule https://deno.com/blog/v2.5#no-unversioned-import-lint-rule [[deno lint]]に[[no-unversioned-import (deno lint)|no-unversioned-import]]が追加された。以下のようにバージョンを明記する必要がある。([[セマンティックバージョニング]]でよさそう) ```diff - import { parse } from "jsr:@std/csv"; + import { parse } from "jsr:@std/csv@^1.0.6"; ``` ## `no-import-prefix` lint rule https://deno.com/blog/v2.5#no-import-prefix-lint-rule [[deno lint]]に[[no-import-prefix (deno lint)|no-import-prefix]]が追加された。`deno.json` や `package.json` がある場合は、import文で依存関係を定義せず、そちらに書きましょうという内容。 `deno.json` の `imports` に定義を移行して ```json { "imports": { "@std/csv": "jsr:@std/csv@^1.0.6" }, } ``` コードはこう。 ```diff - import { parse } from "jsr:@std/csv@^1.0.6"; + import { parse } from "@std/csv"; ```