Skip to content

WindowsでESM import('node:sqlite') が解決不可 — Bunの node:* ビルトイン専用扱いによる制限 #492

@j4rviscmd

Description

@j4rviscmd

概要

Windows環境でESMの import('node:sqlite') が解決不可。Bunのモジュールリゾルバが node:* プレフィックスをビルトイン専用として扱い、ファイルシステム解決にフォールスルーしないため。

背景

PR #491_installBunESMSingletonModule のディレクトリ名をサニタイズ(node:sqlitenode_sqlite)し、WindowsでのENOTDIRクラッシュを修正した。macOS/Linuxではsymlink node:sqlitenode_sqlite/ が作成されるためESM importが動作するが、Windowsでは : を含むjunctionを作成できない。

影響を受ける拡張機能

  • GitHub Copilot Chat (GitHub.copilot-chat-0.43.0): @github/copilot/sdk/index.jsimport('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側の制限(調査結果)

  1. Import Map不可: BunはW3C import map仕様に従い、node:* 指定子をビルトインとして除外
  2. Runtime Plugin不可: Bun.plugin()onResolve フックは node: 名前空間をスキップ(file: のみ対応)
  3. ファイルシステムフォールスルーなし: 不明な node:* 指定子に対して即座にエラー(ファイルシステム解決を試みない)
  4. カスタムビルトイン登録APIなし: process.registerBuiltin 等のAPIが存在しない

関連: Bun Issue #9863

解決に必要な対応

以下のいずれかのBunアップストリーム変更が必要:

  1. Bunが node:sqlite をネイティブサポートbun:sqlitenode:sqlite でも解決できるようにする
  2. 不明な node:* のファイルシステムフォールスルー — ビルトインとして見つからない場合、ファイルシステム解決を試みる
  3. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions