介绍积雪2.0

2020-05-28 07:18:45

在发布了40多个测试版和候选版本之后,我们非常兴奋地推出了SnowPack 2.0:一个用于现代网络的构建系统。

SnowPack 1.0的设计目的很简单:安装直接在浏览器中运行的NPM包。当时的理论是,JavaScript包是在开发过程中唯一仍然需要使用捆绑器的东西。去掉这一要求,去掉捆绑包,加快每个人的web开发。

你猜怎么着?啊,真灵!。数以千计的开发人员开始使用SnowPack来安装他们的依赖项,并使用更少的工具构建网站。一种全新的更快、更轻的开发突然成为可能。

SnowPack 2.0是为这个web开发的新时代设计的构建系统。SnowPack从您的开发环境中删除了捆绑包,利用浏览器中的本地ES模块(ESM)语法直接提供构建的文件。这不仅仅是一个速度更快的工具,它还是Web构建系统的一种新方法。

捆绑是一个O(N)复杂度的过程。随着项目的发展,您的开发捆绑程序需要更长的时间来启动并对更改做出反应。一些捆绑包甚至可能具有O(n^2)复杂度:随着项目的增长,您的开发环境会变得成倍地变慢,因为它在启动和每次更改时都要处理代码拆分、树抖动和其他捆绑包排列。在处理数百甚至数千个文件的开发期间,这两种情况都不理想。

SnowPack是一个O(1)构建系统。这个术语最早是由Ives van Hoorne首创的,它完美地概括了我们的愿景:每个文件都通过线性输入&>;build->;output build管道,然后输出到浏览器(或者最终的构建目录,如果您是为生产而构建的话)。多文件捆绑成为单文件构建步骤。

最后一点很关键:每个构建的文件都被单独缓存并无限期地重用。如果您从不更改文件,则永远不需要重新构建它。

运行Snowpack dev来启动新的web开发环境,您首先会注意到的是O(1)构建工具的速度有多快。积雪启动时间不到50毫秒。这不是打字错误:50毫秒或更少。

无需开始捆绑工作,您的服务器将立即启动。在您的第一个页面加载时,Snowpack会构建您第一个请求的文件,然后缓存它们以备将来使用。即使您的项目包含一百万个不同的文件,SnowPack也只生成加载当前页面所需的文件。这就是积雪保持快速的原因。

SnowPack dev包括一个开发服务器和一系列熟悉的开箱即用功能:

构建脚本允许您连接您最喜欢的构建工具。使用SnowPack,您可以将每个构建表示为线性输入->;构建->;输出工作流。这允许Snowpack通过管道将您的文件传入和传出任何现有的UNIX-y CLI工具,而不需要特殊的插件生态系统。

//nowPack.config.json{";script";:{//每";*.css&34;文件通过PostCSS CLI//stdin(源文件)>;postcss>;stdout(生成输出)";build:css";:";postcss&34;,}}。

如果您曾经使用过您的Package.json“脚本”配置,那么您应该熟悉这种格式。我们喜欢直接使用CLI的简单性,不需要不必要的插件系统。我们希望这个模式能提供类似的直观设计。

如果您希望更好地控制您的构建(或者希望编写您自己的构建工具),SnowPack还支持第三方JavaScript插件。请查看我们的文档,了解有关自定义构建的更多信息。

需要说明的是,SnowPack并不反对捆绑生产。事实上,我们推荐它。文件缩小、压缩、消除死码和网络优化都可以让捆绑站点为您的用户运行得更快,这是任何构建工具的最终目标。

SnowPack将捆绑视为最终的、仅限生产的构建优化。通过将捆绑作为最后一步,您可以避免在同一个巨大的配置文件中混合使用构建逻辑和捆绑逻辑。取而代之的是,您的捆绑器获得已经构建的文件,并且可以只专注于它最擅长的事情:捆绑。

SnowPack为webpack和Amp;Parcel维护官方插件。连接您最喜欢的网站,然后运行Snowpack Build来构建您的站点以用于生产。

如果你不想用捆绑机,也没关系。SnowPack的默认构建将为您提供一个运行良好的非捆绑站点。这就是积雪项目从一开始就要做的:使用捆绑器是因为你想要,而不是因为你需要这样做。

今天我们很高兴能与大家分享这一切。下载SnowPack,体验网络发展的未来。

如果您已经有一个现有的SnowPack应用程序,SnowPack 2.0将指导您更新任何过时的配置。SnowPack最初的软件包安装程序仍然可以正常工作,并且通过新的dev&;build命令,Snowpack甚至可以为您管理您的Web软件包。

开始使用积雪最简单的方法是创建积雪应用程序(CSA)。CSA使用预配置的雪地驱动开发环境自动为您初始化入门应用程序。

感谢我们所有的80多位贡献者,感谢他们使这个版本成为可能。马云感谢Melissa McEwen&;@TheoOnTwitch帮助编辑了这篇帖子。