本地 ES 模块(浏览器或 Node.js)的热模块替换*没有* Webpack?没有构建工具

Posted

技术标签:

【中文标题】本地 ES 模块(浏览器或 Node.js)的热模块替换*没有* Webpack?没有构建工具【英文标题】:Hot module replacement for native ES Modules (browser or Node.js) *without* Webpack? No build tools 【发布时间】:2019-10-14 12:28:19 【问题描述】:

我希望将 HMR 添加到纯 Node.js 代码或使用本机 ES 模块编写的浏览器代码中。

没有 Babel,没有 Webpack,没有转译,只有普通的 JS 文件和 ES Module importexport 调用。

我们可以在普通 Node 或浏览器中进行 HMR 吗?

【问题讨论】:

你的意思是客户端js文件的热重载还是节点服务器的热重载?对于 nodeJS 服务器代码,您可以使用 nodmon:nodemon.io @Bergur 感谢您的建议。我的字面意思是在 Node 中运行的 Node.js 模块的热模块替换 (HMR)(所以基本上是服务器,如果 Node 被用于,但不一定是服务器)。我知道我可以在每次文件更改时重新启动整个 Node.js 进程,这很容易。但我想知道热模块替换 (HMR),仅替换修改后的模块(它类似于 Webpack 中的 HMR,用于客户端代码,但在本例中用于 Node.js 代码)。明白我的意思吗? 是的,对不起。我现在明白了:) 【参考方案1】:

这是一个来自与我个人合作的开发人员/企业家的纯节点 HMR 模块:https://github.com/huan/hot-import

希望这会有所帮助。

【讨论】:

【参考方案2】:

这是一个非常类似于 Webpack API 的库,但用于浏览器中的原生 ES 模块:

https://github.com/SevInf/heiss(也位于https://www.npmjs.com/package/heiss)

这里有一篇关于它的文章:https://itnext.io/hot-reloading-native-es2015-modules-dc54cd8cca01

【讨论】:

【参考方案3】:

Snowpack 是一个使用原生 ES 模块摆脱捆绑的工具,与使用 Webpack 等捆绑器的设置相比,每次保存更改都会更快地反映出来。

来自 Snowpack 网站:

开发过程中不再捆绑:Snowpack 会安装您的 npm 依赖项,以便可以直接在浏览器中导入它们而无需应用程序捆绑器。

即时开发启动:Snowpack 的开发服务器在大多数机器上的启动时间不到 20 毫秒。文件仅根据浏览器的请求按需构建。

即时开发重建:点击保存时不要等待超过几毫秒。由于无需重建大型应用程序块,因此更改会立即反映在浏览器中。

连接您最喜欢的构建工具:使用简单、熟悉的“脚本”界面来管理您的构建,该界面取代了传统复杂的插件生态系统。

用于生产的捆绑包:两全其美:快速的无捆绑包开发 + 生产中的优化捆绑。在捆绑(优化)或非捆绑构建输出之间进行选择,无需任何额外配置。

【讨论】:

【参考方案4】:

另一个是es-dev-server。

【讨论】:

【参考方案5】:

你也可以使用 ViteJs。

如果你想将它用于节点服务器,只需使用节点插件https://github.com/axe-me/vite-plugin-node 就可以了

【讨论】:

以上是关于本地 ES 模块(浏览器或 Node.js)的热模块替换*没有* Webpack?没有构建工具的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 的 commonJS 规范 ES6 导入 js 文件

如何欺骗 Node.js 将 .js 文件加载为 ES6 模块?

Node.js 全球化 es6 模块以像 ImportScripts 一样工作

Node.Js的热更新服务——supervisor

ES6模块,Node.js和Michael Jackson Solution

编写浏览器和Node.js通用的JavaScript模块