Closed5

Svelte4 で追加された依存関係について

ykrodsykrods

導入

svelte4 にアップデートしたところ依存関係が追加されていた。

依存パッケージ減らしたいマンな自分としては「いままでゼロだったのにドウシテ..?」という感じだったので、内容を確認した。

- svelte@3.59.2 
  (依存なし)
- svelte@4.0.0
+-- @ampproject/remapping@2.2.1
| +-- @jridgewell/gen-mapping@0.3.3
| | +-- @jridgewell/set-array@1.1.2
| | +-- @jridgewell/sourcemap-codec@1.4.15
| | `-- @jridgewell/trace-mapping@0.3.21
| `-- @jridgewell/trace-mapping@0.3.21
+-- @jridgewell/sourcemap-codec@1.4.15
+-- @jridgewell/trace-mapping@0.3.21
| +-- @jridgewell/resolve-uri@3.1.1
| `-- @jridgewell/sourcemap-codec@1.4.15
+-- acorn@8.11.3
+-- aria-query@5.3.0
| `-- dequal@2.0.3
+-- axobject-query@3.2.1
| `-- dequal@2.0.3
+-- code-red@1.0.4
| +-- @jridgewell/sourcemap-codec@1.4.15
| +-- @types/estree@1.0.5
| +-- acorn@8.11.3
| +-- estree-walker@3.0.3
| | `-- @types/estree@1.0.5
| `-- periscopic@3.1.0
+-- css-tree@2.3.1
| +-- mdn-data@2.0.30
| `-- source-map-js@1.0.2
+-- estree-walker@3.0.3
| `-- @types/estree@1.0.5
+-- is-reference@3.0.2
| `-- @types/estree@1.0.5
+-- locate-character@3.0.0
+-- magic-string@0.30.5
| `-- @jridgewell/sourcemap-codec@1.4.15
`-- periscopic@3.1.0
  +-- @types/estree@1.0.5
  +-- estree-walker@3.0.3
  | `-- @types/estree@1.0.5
  `-- is-reference@3.0.2
ykrodsykrods

変更理由を調べる

PR#8523 によると「 svelte が依存パッケージをバンドルして配布するより依存関係を明示した方がユーザが audit できるし svelte のダウンロードサイズも節約できるよね」っていうことらしい。

つまり、v3 でも依存ライブラリがなかったわけではなく、バンドルして配布していたようだ(無知)

ykrodsykrods

実際 npm install --save-dev svelte@3.59.2 してソースコードを覗いてみると compiler.js (compiler.mjs) に Acorn などが入っているのが確認できる

ykrodsykrods

具体的にどんなパッケージに依存しているのか調べたところ、半分は Rich-Harris ( svelte の生みの親) が公開しているパッケージだった。

  • periscopic -- Utility for analyzing scopes belonging to an ESTree-compliant AST
  • magic-string -- Manipulate strings like a wizard
  • locate-character -- Get the line and column number of a particular character in a string.
  • estree-walker -- Traverse an ESTree-compliant AST
  • is-reference -- Determine whether an AST node is a reference
  • code-red -- Experimental toolkit for writing x-to-JavaScript compilers

他のパッケージも Acorn (js パーサー) や sourcemap 生成関連のもので、js コンパイラの svelte にとって必須といって良さそうだった

ykrodsykrods

結び

バンドルされると見かけ上はシンプルになるが、オープンになっている方がユーザ側での脆弱性の対応もしやすくなる(できる可能性が高まるというか、任せっきりにならないというか)のでよいと思った。

このスクラップは2024/01/14にクローズされました