- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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: {} };
最佳答案
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/
我是一名优秀的程序员,十分优秀!