gpt4 book ai didi

electron - 如何在我的 Electron 应用程序的客户端代码中导入 Node 模块?

转载 作者:行者123 更新时间:2023-12-03 12:24:35 28 4
gpt4 key购买 nike

我正在使用 Electron 2(用于 Chromium 61+ )和 esm shim 从 ES6 模块构建棋盘游戏在服务器端。这是我第一次编写同构 JavaScript,更不用说 ES6 模块了;我打算能够以单人模式在客户端运行游戏逻辑,并以网络游戏模式在服务器上运行游戏逻辑。到目前为止一切顺利,我很高兴报告!不依赖任何繁重的转译器是令人满意的。

不过,现在我有一个问题:我打算使用 Immutable JS 中的类型。在客户端和服务器上,我只知道如何将它们导入服务器代码。到目前为止,同构代码中的所有 import 语句都引用了应用程序中的其他 JS 模块,而不是来自 npm 的依赖项。当应用程序加载时,如下所示的模块会在客户端中导致“Uncaught TypeError: Failed to resolve module specifier 'immutable'”运行时错误:

import Immutable from "immutable";
Immutable.List.of([]);
export { foo: {} };


事实上,我几乎可以肯定 import 语句失败了,因为 Chromium 无法将“不可变”解析为 JS 文件。但是我该怎么解决呢?有没有办法解决它,它适用于任何被写成同构的节点模块?

最佳答案

TL;DR - 只要你使用 npm 模块,你就不能没有像 webpack 这样的打包工具的帮助。

大多数 node.js 包生态系统还没有为原生模块做好准备。目前 npm 中大约 99% 的已发布包使用 node.js 的 CommonJS 模块系统,而编写支持 esm 的模块非常少(ES 模块语法也是如此)。

esm shim 旨在帮助后者 - 如果模块是用 esm 编写的并且要在当前 node.js 版本中导入不支持它有助于解决这些模块。相反的情况不起作用。 Chromium 可以直接导入以 native 语法编写的代码,然后尝试解析您指定但未能解析为 1 的依赖模块。它不知道在哪里解析(因为它不遵循 node.js 的模块解析规则) 2.当它可以解析时,实际导入会失败,导致模块将是cjs导出而不是原生。

回到上面的 TL;DR - 如果打算实现在两个进程上运行的同构代码,请相应地使用 bundler。

关于electron - 如何在我的 Electron 应用程序的客户端代码中导入 Node 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50453515/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com