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

雷兹马森

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

但是,现在有一个问题:我打算在客户端和服务器上使用Immutable JS中的类型,而我只知道如何将它们导入服务器代码中。到目前为止,同构代码中的所有import语句都引用了应用程序中的其他JS模块,而不是npm中的依赖项。类似于以下模块的模块会在应用加载时在客户端中导致“未捕获的TypeError:无法解决模块说明符'不可变'”运行时错误:

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

实际上,我几乎可以肯定import语句会失败,因为Chromium无法将“不可变的”解析为JS文件。但是我应该如何解决呢?有没有一种方法可以解决这个问题,该方法适用于编写为同构的任何节点模块?

OJ权

TL; DR-只要使用npm模块,就离不开像webpack这样的捆绑器。

大多数node.js软件包生态系统尚未准备好用于本机模块。npm中约有99%的已发布软件包当前使用node.js的CommonJS模块系统,而编写的模块很少支持esm(也包括ES模块语法)。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Jetty:如何在应用程序代码中验证 SSL 客户端证书?

如何在Node.js应用程序的客户端站点上处理JWT令牌?

如何在我的应用程序中导入linkedin sdk?

如何在客户端调试我的应用程序exe

如何在客户端Java应用程序中使用客户端证书?

在快速应用程序中通过客户端js中的CDN导入模块

客户端代码Web应用程序的许可系统

如何从应用程序客户端连接远程EJB模块

如何在客户端/服务器应用程序中区分多个客户端

如何在React应用程序中导入highcharts子模块

在客户端React组件中导入npm模块

如何在客户端代码中使用节点模块?

如何授权多个客户端应用程序访问我的Azure存储资源?

如何扩展我的Web应用程序框架(MVC)以服务于移动客户端?

如何在gradle Java应用程序中包含来自openapi-generator的客户端?

如何在WinForms客户端应用程序中使用命令模式?

如何在应用程序中的客户端之间创建隔离

如何在Azure Active Directory中查询应用程序客户端密钥?

如何在React Native应用程序中为Apollo客户端添加标头

如何在基于API的多页客户端应用程序中组织路由?

如何在本机应用程序上存储OAuth客户端ID

IRC客户端应用程序,如何在python中使用select()

如何在Windows 7上启动Azure远程应用程序客户端

如何在JAVA中运行服务器-客户端应用程序

如何在Blazor客户端应用程序中使用Bootstrap模态?

如何在Mojolicious应用程序的单元测试中伪造客户端IP地址?

如何在Blazor客户端应用程序的服务中调用HttpClient

C# EventHandler:如何在客户端应用程序中处理 EventHandler?

如何在Angular 2客户端应用程序中隐藏/保护API密钥?