scrapbox-bundler
web browserで動くUserScript/UserCSSのbundler tool
UserScriptをbundleするDeno scriptとUserCSSをbundleするDeno scriptのbrowser version
/icons/github.icontakker99/scrapbox-bundler
使い方
設定画面で設定してからbuild
(未実装)
https://github.com/takker99/scrapbox-bundler/pull/13 で削除した
作るモチベがまったくない
使わないコードがずっとソースに載っていて、管理が面倒
使わないコードの型修正なんて不毛
URLを踏むと即buildする
https://scrapbox-bundler.vercel.app?url=:source&bundle
(旧URL:https://takker99.github.io/scrapbox-bundler)
e.g.
pin-diary-4をbundleする
pin-diary-4をbundle&minifyする
pin-diary-4をbundle&minifyする (source mapつき)
井戸端のSettingsをbundle&minifyする
:urlに含まれている%2Fは/に変換されてしまうので、Scrapboxのタイトルなどで%2Fを使っている場合は更にencodeをかぶせて%252Fに置き換えておくこと
例:from-programming-notes#618ce8321280f00000fb396b
runを付与する必要があったが、 https://github.com/takker99/scrapbox-bundler/pull/13 からrunがなくても即buildするよう変えた
追加options
bundle
コードを1つにまとめる
minify
コードを最小化する
sourcemap
source mapを埋め込む
reload
cacheを無視する
importmap
import mapがあるURLを指定する
urlを基準とした相対パスを使える
external
see external (scrapbox-bundler)
複数指定する場合は、external=aaa.css&external=test.pngなどとする
urlを基準とした相対パスを使える
❌️output
download: ファイルをダウンロードする
newtab: 新しいタブで開く
self(default): 同じタブで開く
2024-07-27 廃止
代わりにbuild後のUIに、downloadやコピーボタンを乗せる
scrapbox-bundlerの今後の設計予定のイメージ図参照
メリット
terminalが不要
いちいちterminalを起動してコマンドを打つ手間を省ける
terminalを使えない環境 (mobile端末とか) でもbundleできる
あらかじめ設定したURLをscrapboxのページに貼り付けておけば、リンクをクリックするだけでbundleしたコードを取得できる
仕様とか
/icons/done.iconscrapboxのコードブロックやGithubのコードのURLを指定して実行する
bundleやminifyを指定しない場合は、TS→JSの変換を行うだけ
/icons/done.icon各種optionやbundle対象のソースURLはURL parameterから指定できる
/icons/done.iconclient sideでbundleする
esbuild-wasmを使う
/icons/done.iconcache機能つき
/icons/TODO.iconServiceWorkerを使う
offlineでも使えるようになる
もっとも、http importで外部からソースを取得するケースがほとんどだろうから、offline対応してもあまりうまみはないのだが
/icons/done.iconCSS対応
/icons/TODO.iconURL parameteroutputに応じてUIのradio buttonを切り替える
📝esbuildのoption対応 (scrapbox-bundler)
/icons/done.icon?runでページにアクセスしてすぐbundleを開始できる
疑似的なserverless functionとして使える
reloadでESModuleを再読込する
Denoのように、特定のURLだけ再読込できるような仕組みもつけたい
private projectのコードも取得できるようにするつもりだが、方法は考え中
確実なのはGM_xmlhttpRequestを使うことだが、TamperMonkeyなしで出来る方法があればそちらを使いたい
2021-11-03 17:37:22 やめた
scrapbox-bundlerにおけるCORS制限つきコードの取得方法
実装したいこと
build Log
/icons/done.iconfetch errorを表示するhttps://github.com/takker99/scrapbox-bundler/commit/0ac3d48696effa7daaab45e250a9ba789001aae9
色を付ける
scroll barをつける
entryPointを使えるか?
URLを入れるとバグるんじゃないかと思ってstdinを代わりに使っているが、もしかしたらいけるかも?
scrapbox json dataの生成処理をworkerに移す
再読込対象のURLを指定できるようにする
--reload (Deno)の仕様
warningsとerrorsをUIに表示する
bookmarklet生成モード
javascript:(async()=>{})()で囲んだものを出力する
そのまま貼り付けられるよう、予めURLエンコーディングしておく
drag & dropで導入できるように、ボタンを設置しておくのもありかも
⬜相対パスを生成する時の基準となるパスを指定できるようにする (scrapbox-bundler)
scrapboxのUserScript専用builderとして再構築すべきか?
それ以外の用途は、もうesm.shが担っている
scrapboxのUserScript作成支援に舵を切ったほうがいいのでは
想定
複数のJSやCSSをbuildし、指定したprojectの指定したpageの指定したcode blockに書き込む
JSR importのmodule解決をサポート
Semantic Versioningを見ていい感じに依存を解決する処理も入れる
UI
URLで生成
今まで通り、client側でbuildさせる
CLIで生成
hot reload的なこともできるようにする
localhostからGM_fetch経由でデータを拾って、import-devにbackgroundでテストコードを貼り付けるUserScriptのような仕組みで書き込んでreloadをかける
esbuild-wasmの全コードをworker srcにしてしまうのは良くなかったかも
外部かユーザー定義のfetchを注入することが難しくなる
今はbuild.worker.tsでhard codingしている
build処理を@takker/ScrapJupyterから使いたいときに問題となる
バグ
/icons/done.iconCSS中でurl()に指定した画像やfontデータもbundleしようとしてバグる
例:井戸端のSettingsをbundle&minifyする
UserCSSをbundleするDeno scriptでも起きていた現象
うまいこと回避できないかな……
案
/icons/pass.icon画像系はexternal: trueとして処理する
これでうまくいく
井戸端のSettingsをbundle&minifyする
dependencyの階層が深いとUIが処理落ちする
dependency graphだけ、Reactの差分更新ではなく直接DOMを組み立てる方式にする?
一回のResolveInfo | LoadInfoにつき1回だけDOM更新するだけで済ませられる
元となるobjectをnestして持たせる必要もない
DOM構造を階層構造の情報とみなせばいい
2024-07-27 12:15:11 そもそも実装がおかしい
✅️一旦削除する
.cssが.txtと認識される?
.ts.jsになってしまうのを直す
使っているesbuildのversionを表示する
https://scrapbox.io/api/code/takker/@takker%2FScrapJupyter/mod.tsのような、percent encodingされた/が含まれているURLが、templateに埋め込む段階だとhttps://scrapbox.io/api/code/takker/@takker/ScrapJupyter/mod.tsと解釈されてしまう
decodeURIComponent()を通すとこうなってしまうみたい
URL parametersにhttps://scrapbox.io/api/code/takker/@takker%25FScrapJupyter/mod.tsと与えてもだめ
仕様として我慢するしかないか……
作業ログ | scrapbox-bundler
実装
開いたHTML上でesbuild-wasmを動かす
一応worker内で動かすか
HTMLファイルや使用するwasmファイル、取得したESModule/CSSなどはServiceWorker経由でCache (DOM)に保存する
Frameworkは多分使わない
DOMをそのままいじるだけで十分だと思う
複雑になりそうだったらPreactを導入する
導入した
Server sideでやったほうがいい?
bundleが5秒以内に終わらないとVercelのserverless functionは強制終了するらしい
client sideでbundleするのが無難か。
Deploy先はGithub pagesのproject siteにする
https://takker99.github.io/scrapbox-bundlerに公開されるみたい?
あー、index.htmlはhttps://takker99.github.io/scrapbox-bundler/index.htmlに配置しないといけないのか……
JSとCSSへのパスを変えるか。
2021-11-11 12:45:54 deploy完了
deploy方法がかなり強引だが……
mainにpushした内容をそのままgh-pagesにコピーしている
./index.htmlから./assetsの中身を取得している
✅scrapbox-bundlerのdeploy先をgithub pagesからvercelに変えた
関連
uniroll
DevTools上でesbuildするChrome拡張を書いた - 詩と創作・思索のひろば
/sno2wman/DevTools上でesbuildするChrome拡張を書いた(外部記事)
まさかの類似ツールtakker.icon
動機が完全に同じ
拡張機能で実現しているのか~
中途半端にサーバーを経由する必要がないからこっちのほうがいいのかもしれない
PRしたくなってきたやばい
#2024-07-27 12:33:24
#2024-07-27 12:15:26
#2024-07-24 17:16:15
#2024-07-09 20:26:15
#2024-07-02 17:20:53
#2023-07-13 08:51:28
#2022-03-26 09:22:01
#2022-03-23 13:08:47
#2022-03-02 07:36:29
#2021-12-11 06:57:30
#2021-12-05 09:23:18
#2021-12-03 09:37:50
#2021-12-02 18:31:43
#2021-11-29 15:01:09
#2021-11-22 09:56:51
#2021-11-12 09:48:45
#2021-11-11 09:37:29
#2021-11-08 23:32:27
#2021-11-03 17:42:45
#2021-10-31 22:10:49