如何在 remix 配置中启用 polyfill?

问题描述 投票:0回答:1

(不是开发人员,初学者使用 remix/node.js 构建 Shopify 应用程序并一边学习一边学习编码) 因此,每当我从 MySQL2 文件/文件夹导入 { CreatPool } 时,我的 npm run dev 终端中都会出现以下错误

“X [错误]节点内置“net”(由“node_modules/mysql2/lib/server.js”导入)必须为浏览器进行polyfill。您可以在Remix配置中启用此polyfill,例如

browserNodeBuiltinsPolyfill: { modules: { net: true } }
[插件浏览器-node-builtins-polyfill-plugin]"

我相信在这条消息中它准确地告诉了我如何解决问题,但我不明白该怎么做。 我需要向 browserNodeBuiltinsPolyfill.js 添加文件/代码行吗?或者我需要运行特定的终端线路吗? 我相信答案是,正如我所说,“您可以在 Remix 配置中启用此 polyfill,例如

browserNodeBuiltinsPolyfill: { modules: { net: true } }
[插件 browser-node-builtins-polyfill-plugin]”,但我不明白它。

尝试使用 mysql 而不是 mysql2,原始代码停止工作,所以没有意义。

非常感谢任何帮助!

node.js npm mysql2 remix remix.run
1个回答
0
投票

我假设您正在从加载器/操作中调用 MySQL 函数。

Remix 创建两个捆绑包,一个用于服务器,一个用于客户端/浏览器。大多数时候,Remix 非常聪明,知道每个包中属于哪些代码。然而,有时由于包的构建方式,服务器代码可能最终出现在浏览器包中,反之亦然。

Remix 有一个逃生舱口,因此您可以明确说明要使用哪个捆绑包。就您而言,您似乎需要指定您的 MySQL 代码仅属于服务器。您可以通过在文件名中添加

.server
后缀来完成此操作。

// lib/mysql2.server.ts
export function CreatePool() {}
// routes/route.tsx
import { CreatePool } from '~/lib/mysql2.server'

注意:如果您的导入来自像

mysql2-package
这样的包,则像上面一样创建服务器文件,但只需重新导出包即可。

export * from 'mysql2-package'

https://remix.run/docs/en/main/guides/gotchas#server-code-in-client-bundles

© www.soinside.com 2019 - 2024. All rights reserved.