【发布时间】:2021-11-03 09:35:13
【问题描述】:
我的主要目标是创建一个电子应用程序 (Windows),将数据本地存储在 SQLite 数据库中。由于类型安全,我选择使用Prisma framework 而不是其他 SQLite 框架。 我接受了this Electron Sample Project,现在尝试加入 Prisma。根据我尝试的不同,确实会出现不同的问题。
1。 PrismaClient 无法在浏览器中运行
我执行了npx prisma generate,然后尝试通过一个按钮执行这个函数:
import { PrismaClient } from '@prisma/client';
onSqlTestAction(): void {
const prisma = new PrismaClient();
const newTestObject = prisma.testTable.create(
{
data: {
value: "TestValue"
}
}
);
}
在 Electron 中执行此操作时,我得到以下信息:
core.js:6456 ERROR Error: PrismaClient is unable to be run in the browser.
In case this error is unexpected for you, please report it in https://github.com/prisma/prisma/issues
at new PrismaClient (index-browser.js:93)
at HomeComponent.onSqlTestAction (home.component.ts:19)
at HomeComponent_Template_button_click_7_listener (template.html:7)
at executeListenerWithErrorHandling (core.js:15281)
at wrapListenerIn_markDirtyAndPreventDefault (core.js:15319)
at HTMLButtonElement.<anonymous> (platform-browser.js:568)
at ZoneDelegate.invokeTask (zone.js:406)
at Object.onInvokeTask (core.js:28666)
at ZoneDelegate.invokeTask (zone.js:405)
at Zone.runTask (zone.js:178)
Prisma 不能在浏览器中运行似乎是合乎逻辑的。但我实际上构建了一个原生应用程序 - 使用嵌入浏览器的 Electron。这似乎是一个漏洞。
2。重大变化:webpack
所以我发现了这个问题:How to use Prisma with Electron
似乎正是我所寻找的。但错误信息不同(未找到 Debian 二进制文件)。
提供的解决方案是将 prisma 工件生成到 src 文件夹而不是 node_modules - 这会导致 19 个 polyfill 错误。一个例子:
./src/database/generated/index.js:20:11-26 - Error: Module not found: Error: Can't resolve 'path' in '[PATH_TO_MY_PROJECT]\src\database\generated'
BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.
If you want to include a polyfill, you need to:
- add a fallback 'resolve.fallback: { "path": require.resolve("path-browserify") }'
- install 'path-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
resolve.fallback: { "path": false }
这与其他 18 个模块重复。由于开始的错误消息不同,我也怀疑这是要走的路。
【问题讨论】: