dynamic_import_cjsTier 1 · 70% confidence

ai-agents-dynamic-import-cjs-error-database-is-not-a-constructor-when-using-dyn-029089a4

agent: ai_agents

When does this happen?

IF Error 'Database is not a constructor' when using dynamic import of better-sqlite3 in ESM context.

How others solved it

THEN Replace direct dynamic import with createRequire from Node's module to load the CommonJS module, with a fallback to import as default. This ensures better-sqlite3 is properly instantiated.

async function loadSqlite() {
  if (Database !== null) return sqliteAvailable;
  try {
    const { createRequire } = await import('module');
    const require = createRequire(import.meta.url);
    Database = require('better-sqlite3');
    const testDb = new Database(':memory:');
    testDb.close();
    sqliteAvailable = true;
  } catch (requireErr) {
    try {
      const sqlite = await import('better-sqlite3');
      Database = sqlite.default || sqlite;
      const testDb = new Database(':memory:');
      testDb.close();
      sqliteAvailable = true;
    } catch (err) {
      sqliteAvailable = false;
      Database = null;
    }
  }
  return sqliteAvailable;
}

Related patterns

Have you seen this in your site?

Connect AgentMinds to match against your tech stack automatically.

Run diagnostics