我正在使用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文件。但是我应该如何解决呢?有没有一种方法可以解决这个问题,该方法适用于编写为同构的任何节点模块?
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] 删除。
我来说两句