Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"__dirname is not defined in ES module scope" when running "solid-start start" #398

Closed
viridia opened this issue Nov 4, 2022 · 3 comments

Comments

@viridia
Copy link

viridia commented Nov 4, 2022

When I attempt to run "npm start" in my solid-start project, I get the following error:

file:///Users/talin/Projects/solid/colloquy/dist/server.js:36542
	import_path.default.join(__dirname, "../query-engine-darwin");
	                         ^

ReferenceError: __dirname is not defined in ES module scope
This file is being treated as an ES module because it has a '.js' file extension and '/Users/talin/Projects/solid/colloquy/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///Users/talin/Projects/solid/colloquy/dist/server.js:36542:27
    at file:///Users/talin/Projects/solid/colloquy/dist/server.js:48573:3
    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:526:24)

Node.js v18.10.0
@pawelblaszczyk5
Copy link
Contributor

Actually it's caused by Prisma being a CJS dependency. You can solve it by externalizing it, like this: https://github.com/pawelblaszczyk5/planotes/blob/4b24f1d74735856bc438ba72c4ac036e9d198a73/apps/web/vite.config.ts#L8

@huzaifahj
Copy link

huzaifahj commented Jan 7, 2023

@pawelblaszczyk5 what if our Prisma client is in another folder in a monorepo? This is only what worked for me:

import { createRequire } from "module"
const require = createRequire(import.meta.url)
const { PrismaClient } = require("../../../prisma/prisma-client/index.js")

But then we don't get type safety

@mkreuzmayr
Copy link

@huzaifahj @pawelblaszczyk5 Here is the type-safe solution I came up with.

prisma/prisma#5030 (comment)

import type { PrismaClient as ImportedPrismaClient } from '@prisma/client';
import { createRequire } from 'module';

const require = createRequire(import.meta.url ?? __filename);

const { PrismaClient: RequiredPrismaClient } = require('@prisma/client');

const _PrismaClient: typeof ImportedPrismaClient = RequiredPrismaClient;

export class PrismaClient extends _PrismaClient {}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants