西村 祐真
@variant3a
SveltekitでKnex(Objection.js)を使うときに発生するエラー: 「__dirname is not defined in ES module scope」の解決策
2023-12-04
views: 354
問題
Objection.jsを利用したプロジェクトでSveltekitを使用し、ビルドした際に以下のようなエラーが出る。
__dirname is not defined in ES module scope
Objection.jsはKnexベースなので、どちらのORMを使用する際も問題が発生する可能性がある。
原因
これはSveltekitがESMで、KnexがCJSで定義している__dirnameを扱えないことが原因らしい。
詳細はここ: Svellte/SvelteKit tips集 - Zenn
対策
プロジェクトでは以下のように設定した。
import { DB_DATABASE, DB_HOST, DB_PASSWORD, DB_PORT, DB_USERNAME } from '$env/static/private'
import type { knex as InportedKnex } from 'knex'
import { createRequire } from 'module'
const require = createRequire(import.meta.url ?? __filename)
const { knex: RequiredKnex } = require('knex')
const Knex: typeof InportedKnex = RequiredKnex
export const knex = Knex({
client: 'mysql2',
useNullAsDefault: true,
connection: {
host: DB_HOST,
port: Number(DB_PORT),
user: DB_USERNAME,
password: DB_PASSWORD,
database: DB_DATABASE
},
})
2023-12-04
views: 354
most viewed
Laradockを利用したLaravel環境構築
@variant3a
2022-06-09
views: 365
BrowserSyncを使おう
@variant3a
2022-06-09
views: 285
Office365UserコネクタのSearchUserV2の制限
@variant3a
2022-07-14
views: 316
Laravelのルーティング順による404エラーの対処法
@variant3a
2022-07-16
views: 644
「"仮想DOMは速い"という神話を完全に終わりにしよう」
@variant3a
2022-07-19
views: 450