概要
Windows環境でESMの import('node:sqlite') が解決不可。Bunのモジュールリゾルバが node:* プレフィックスをビルトイン専用として扱い、ファイルシステム解決にフォールスルーしないため。
背景
PR #491 で _installBunESMSingletonModule のディレクトリ名をサニタイズ(node:sqlite → node_sqlite)し、WindowsでのENOTDIRクラッシュを修正した。macOS/Linuxではsymlink node:sqlite → node_sqlite/ が作成されるためESM importが動作するが、Windowsでは : を含むjunctionを作成できない。
影響を受ける拡張機能
- GitHub Copilot Chat (
GitHub.copilot-chat-0.43.0): @github/copilot/sdk/index.js が import('node:sqlite') を使用
- チャットセッションのローカルストレージに利用している模様
- エラー自体はキャッチされており拡張機能はクラッシュしないが、
node:sqlite を利用する機能が動作しない
エラーログ
No such built-in module: node:sqlite
specifier: "node:sqlite"
importKind: "import-statement"
referrer: GitHub.copilot-chat-0.43.0\node_modules\@github\copilot\sdk\index.js
Bun側の制限(調査結果)
- Import Map不可: BunはW3C import map仕様に従い、
node:* 指定子をビルトインとして除外
- Runtime Plugin不可:
Bun.plugin() の onResolve フックは node: 名前空間をスキップ(file: のみ対応)
- ファイルシステムフォールスルーなし: 不明な
node:* 指定子に対して即座にエラー(ファイルシステム解決を試みない)
- カスタムビルトイン登録APIなし:
process.registerBuiltin 等のAPIが存在しない
関連: Bun Issue #9863
解決に必要な対応
以下のいずれかのBunアップストリーム変更が必要:
- Bunが
node:sqlite をネイティブサポート — bun:sqlite を node:sqlite でも解決できるようにする
- 不明な
node:* のファイルシステムフォールスルー — ビルトインとして見つからない場合、ファイルシステム解決を試みる
- Runtime Pluginでの
node: 名前空間対応 — onResolve フックで node:* 指定子をインターセプト可能にする
現状のワークアラウンド
- CJS
require('node:sqlite') は全プラットフォームで動作(Module._resolveFilename インターセプト経由)
- ESM
import('node:sqlite') はmacOS/Linuxでのみ動作(symlink経由)
環境情報
- OS: Windows 11 Pro 10.0.26200
- Bun: 1.3.13
- Tauri: 2.10.3
概要
Windows環境でESMの
import('node:sqlite')が解決不可。Bunのモジュールリゾルバがnode:*プレフィックスをビルトイン専用として扱い、ファイルシステム解決にフォールスルーしないため。背景
PR #491 で
_installBunESMSingletonModuleのディレクトリ名をサニタイズ(node:sqlite→node_sqlite)し、WindowsでのENOTDIRクラッシュを修正した。macOS/Linuxではsymlinknode:sqlite→node_sqlite/が作成されるためESM importが動作するが、Windowsでは:を含むjunctionを作成できない。影響を受ける拡張機能
GitHub.copilot-chat-0.43.0):@github/copilot/sdk/index.jsがimport('node:sqlite')を使用node:sqliteを利用する機能が動作しないエラーログ
Bun側の制限(調査結果)
node:*指定子をビルトインとして除外Bun.plugin()のonResolveフックはnode:名前空間をスキップ(file:のみ対応)node:*指定子に対して即座にエラー(ファイルシステム解決を試みない)process.registerBuiltin等のAPIが存在しない関連: Bun Issue #9863
解決に必要な対応
以下のいずれかのBunアップストリーム変更が必要:
node:sqliteをネイティブサポート —bun:sqliteをnode:sqliteでも解決できるようにするnode:*のファイルシステムフォールスルー — ビルトインとして見つからない場合、ファイルシステム解決を試みるnode:名前空間対応 —onResolveフックでnode:*指定子をインターセプト可能にする現状のワークアラウンド
require('node:sqlite')は全プラットフォームで動作(Module._resolveFilenameインターセプト経由)import('node:sqlite')はmacOS/Linuxでのみ動作(symlink経由)環境情報