## 経緯
[[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";
```