Snowpack。 喜欢这个名字。这是来自 Pika 团队的新事物,他们 正在做一些有意义的事情。从某种意义上说,它是一个打包器的 替代方案。它运行在您从 npm 拉取的包之上,以确保它们与 ES 模块兼容(原生导入)。
我这样理解它。当您编写如下代码行时
import React from "react";
这实际上是无效的 JavaScript。它 看起来像一个原生导入,但它不是。(要使其有效,它应该以文件路径字符(如 ./)开头,并以 .js 结尾。)这只是来自大型打包器的一个约定,类似于,“哦,我知道你的意思。你的意思是让我去 node_modules 中查找这个东西。”然后它就去做了。
npm 上很多东西还没有准备好用于 ES 模块。它采用其他模块格式(例如 CommonJS),并假设您将使用打包器与之配合使用。这个假设在一段时间内为它们提供了良好的服务,但它开始成为前端开发人员的一个小麻烦。
UNPKG 拥有一个功能,您可以在其 URL 末尾添加 ?module 以使其提供该包的 ES 模块友好版本,但它长期处于实验阶段,因为,据推测,这是一个难以解决的问题。哪些包已准备好用于 ES 模块?它们能否在运行时被处理以使其准备好?
即使 Pika CDN 也无法解决那些未编写为通过 ES 模块使用的包的问题。例如,由于 React 未编写为直接使用 ES 模块,因此您无法直接使用它(但您仍然可以通过 <script> 标签使用它)。
Snowpack 显然已经解决了这个问题。它对您安装(本地)的包运行其神奇操作,并为 ES 模块使用做好准备。因此,在 Snowpack 运行之后,您现在可以执行以下操作(以前您无法执行此操作)
import React from '/web_modules/react.js';
这 是 ES 模块的有效代码。此外,如果您无论如何都运行 Babel,您甚至不必更改原始代码行。
因此,他们的营销/解释如下
1) 而不是在每次更改时都打包,只需在
npm install之后 运行一次 Snowpack。
2) Snowpack 将您的依赖项重新安装为单个 JS 文件到新的web_modules/目录中。
3) 编写代码,通过 ESMimport导入这些依赖项,然后在浏览器中运行它们。
4) 跳过打包步骤,并在保存后立即在浏览器中看到您的更改反映出来。
5) 继续使用您最喜欢的 Web 框架和构建工具!支持 Babel 和 TypeScript。
这有点像您免费获得了原生代码分割,并且您只是希望 ES 模块与打包一样快,并具有这种优势。我持乐观态度。我认为这还处于早期阶段,在大型生产环境中我会感到紧张,但我也认为原生 ES 模块可能是未来。
请注意,打包对于减少请求数量也是必要的,因此,在神奇的原生模块未来到来之前,另一项技术需要得到广泛应用:HTTP2 及其在不增加多个请求开销的情况下提供一系列文件的能力。
我认为现在基本上就是这样了? https://caniuse.cn/#feat=http2
好文章!我也一直在欣赏 Snowpack 提出的主张。我看到的构建时间非常惊人(请注意,我没有在任何生产/大型应用程序中使用它),但确实同意 Snowpack 团队正在做一些有意义的事情。我希望 Web 应用程序构建的未来看起来像他们推广的那样:D
话虽如此,我发现自己仍然在 Snowpack 中使用 Babel 来提供 JSX 支持。我创建了一篇简短的文章/视频,详细介绍了如何为任何感兴趣的人设置 React/Snowpack:https://dev.to/ryanlanciaux/snowpack-with-react-ch3
查看这个项目 https://hqjs.org/ 它已经存在一段时间了,并解决了更多问题。您可以使用单个命令运行 React、Angular、Vue 或简单的 JS/TS 项目。无需任何配置。