🦕
Deno 2でObsidian Pluginを書く
宣伝
Obsidianのノートのトップにリレーショングラフを埋め込むプラグインを開発しています
めちゃ便利なので使ってくれ!!!
本編
自作のObsidianプラグインをNode.js with pnpmから最近リリースされたDeno 2に移行した
Obsidianに読み込ませる際は以前と同様esbuildでCommonJSにバンドルする
Node.jsとの互換性が高くnpmも使えるので基本動く
https://github.com/ras0q/obsidian-graph-banner/pull/99
利点としては
- ビルトインTypeScriptサポート
- tsconfig.jsonがいらなくなる
- eslint, preitter, biomeがいらなくなる (deno fmt, deno lint, deno check)
package.json
を消してdeno.jsonc
に以下を記述したら大体動く
imports
(package.json
のdependencies
)はプラグインに合わせて調整する
deno.jsonc
{
"compilerOptions": {
"lib": [
"deno.window",
"dom"
]
},
"exclude": [
"node_modules",
"main.js"
],
"imports": {
"esbuild": "npm:esbuild@0.24.0",
"ignore": "npm:ignore@6.0.2", // プラグイン固有の依存パッケージ
"obsidian": "npm:obsidian@1.7.2"
},
"nodeModulesDir": "auto", // esbuildがignoreを認識するためにnode_modulesを作成する必要がある
"tasks": {
"build": "esbuild ./src/main.ts --bundle --external:obsidian --format=cjs --minify --target=es6 --outfile=./main.js",
"dev": "esbuild ./src/main.ts --watch --bundle --external:obsidian --format=cjs --target=es6 --sourcemap=inline --outfile=./main.js"
}
}
-
compilerOptions.lib
がデフォルト(["deno.window"]
)だとHTMLElement.parent
などの定義が足らず型エラーが出るので"dom"
を追加 -
nodeModulesDir
をauto
(デフォルトはnone
)に - ESBuildは元々ファイルに書いて
node
で実行していたが、tasks
に直接書いた(好み)
GitHub Actionsのworkflowsをdenoland/setup-deno
などを使って修正する
deno install
で明示的にnode_modules
内にパッケージをインストールしないとdeno task build
でesbuild: command not found
をくらってしまうので注意
設定ファイルが減って最高~~
Discussion