Denoで依存先のmoduleのversionを統一できない問題
どういうことか
こういう状況が起こりうる
code:index.ts
import A from 'https://path/to/moduleA@0.1.0/mod.ts';
import B from 'https://path/to/moduleB@0.2.3/mod.ts';
// ...
code:https://path/to/moduleA@0.1.0/mod.ts
import C from 'https://path/to/moduleC@0.2.1/mod.ts';
// ...
export default {...};
code:https://path/to/moduleB@0.2.3/mod.ts
import C from 'https://path/to/moduleC@0.4.3/mod.ts';
// ...
export default {...};
index.tsでmoduleCをversion違いで複数読み込んでしまう
何が問題か
bundle時にtree shakingが効かなくなる
version違いの同じ機能のコードが被るというだけで気持ち悪い
まあこれは感覚の問題なのでどうでもいいのだが
数KB程度のコードなら大したことないが、800KBぐらいの巨大なmoduleになるととても無駄が大きくなる
version違いのlodashが複数個丸々一つのファイルに組み込まれている状態を想像していただければイメージがつかめると思う
副作用付きimportだった場合、同じ機能を持った副作用を複数個走らせることになる
Node.jsでの解決法
あくまで想像だが(調べろ)
package.jsonでversionを固定されてあるものはそのまま読み込む
一定範囲でversionを変えられるように設定されていた場合は、なるべく一つのversionを使えるように範囲内でversionを上下させる
^とか<とか~がversion番号の先頭についているやつ
2024-08-02 11:42:53 これを依存解決アルゴリズムと呼んでいる
これと同様のことをDenoでもできればいいのだが……
既存の解決策はあるのだろうか?
適切な言葉を知らないと検索できない現象が発生していてうまく検索できない……takker.icon
知っている人いらっしゃいましたらtakker.iconに連絡していただけると嬉しいです
2022-01-06 10:33:43 import mapで対処しているtakker.icon
2024-08-02 11:43:09 やはり問題だったようで、What we got wrong about HTTP importsという記事が投稿されてた
気にしているのこの問題じゃなくて、import React from 'react'をimport {h} from 'preact'に置換する処理ができないことの方な気がする
React向けに作られたcusom hooksをDeno+Preactで使おうとする時などに発生する
こっちはimport mapではどうにもならなそう
Related to
/keroxp/Denoよどこへ行く#61cef10fc95d9100002e272d
duplicate dependency problem
#2024-08-02 11:43:33
#2022-01-06 10:34:22
#2021-07-25 18:45:49