暇な時にも便利関数作ったりしてるのでまとめてちゃんとしたライブラリにしたいなーって思うわけです

必要な物だけインポートする というの自体は難しいことじゃないですが そのためにはライブラリファイル内ではローカルの変数に関数を持たせておいて 直接グローバルや Array.prototype などのオブジェクトのプロパティにはつけないようにしないといけないです

そうなると この関数は window 以下に直接置く関数 とか この関数は Array のプロトタイプの拡張用関数 とか どこに設置するかの情報を持たせないとダメです

また インポートしないかもしれないので プロトタイプの拡張自体はせずに関数を用意しておくだけになるということは ライブラリの中では作ったメソッドを使えないです

関数指定して call や apply とかすればいいですけど長くて見づらいし使いにくいです
call しなくていいように プロトタイプ拡張用の関数でも this は使わないという手もあります
第一引数を this 代わりにして中身を定義します
インポートして Array.prototype などに設置するときには this を第一引数に持ってきて実行するよう工夫します

なんか微妙です
このためにメソッド実行するときに毎回ムダに1つ処理通してますし それ以前に この関数がプロトタイプ拡張用だーってわかるように 「lib.Array.prototype.repeat」 みたいな 長いパスになってますし 実行するだけで大変です

Array のプロトタイプに入るんだからと [1,2,3].repeat なんて書いても repeat がインポートされなければそんな関数無いってエラーになります

それに getter など defineProperty で作るプロパティは ライブラリ内で使うのとインポート機能の両立はたぶん無理です
call や apply でどうにかなるものじゃないので グローバルから辿れる部分に直接定義することになりますが そうするとインポートしてない時でも使えてしまいます
消してしまうと それを前提としてるライブラリの関数が動かなくなるので インポートされなければ消せばいいということはできないです

window が複数作れると解決できそうなものも多いので iframe でライブラリロード用のページ作って 親フレームに渡そうと考えてみても クロスドメインだからでーたのやりとりできないんですよねー


ライブラリは使う側が楽するものなんだから 作るときはライブラリ内の別の関数使えないくらいの辛い環境は我慢するもの なのかもですけどそれって不便すぎですよねー