Snowpack

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

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) 编写代码,通过 ESM import 导入这些依赖项,然后在浏览器中运行它们。
4) 跳过打包步骤,并在保存后立即在浏览器中看到您的更改反映出来。
5) 继续使用您最喜欢的 Web 框架和构建工具!支持 Babel 和 TypeScript。

这有点像您免费获得了原生代码分割,并且您只是希望 ES 模块与打包一样快,并具有这种优势。我持乐观态度。我认为这还处于早期阶段,在大型生产环境中我会感到紧张,但我也认为原生 ES 模块可能是未来。