pikaチームはSnowpackの2番目の大きなイテレーションをリリースした。Snowpack 2.0は、最新のWebのビルドシステムとして自称し、大規模なプロジェクトでも起動時間が50ミリ秒未満であると主張している。Snowpack 2.0は、開発中のバンドルを回避することでその速度を実現する。バンドルは引き続きプロダクション用に生成される場合がある。Snowpack 2.0には、その他のスタックを対象としたCreate Snowpack App (CSA) スタータテンプレートのセットが付属している。
Snowpackのリリースノートでは、Snowpackの2番目のイテレーションによって追加される価値について説明している:
Snowpack 1.0は、開発中にバンドラの使用を要求 [せずに]、ブラウザで直接実行するnpmパッケージをインストールするという単純な使命のために設計されました。[…] 何千もの開発者がSnowpackを使用して依存関係をインストールし、より少ないツールでWebサイトを構築し始めました。
Snowpack 2.0は、この新しいWeb開発の時代のために設計されたビルドシステムです。Snowpackは、開発環境からバンドラを削除し、ブラウザのネイティブ ES Module (ESM) 構文を利用して、ビルドされたファイルを直接提供します。これは単なる高速ツールではなく、Webビルドシステムへの新しいアプローチです。
リリースノートでは、開発のバンドルステージを削除することで、Snowpackが一定のビルド時間 (O(1) ビルド時間としてまとめられる特性) を実現する方法を説明する:
(出典: Release note)
前の図では、バンドルがしばしば時間のかかる作業であることを示している。これは、バンドルの複雑さが O(n) であるためである。つまり、エンティティのバンドルを生成する時間は、バンドルされるエンティティの数に比例する。バンドルがここ数年の開発でより一般的になるにつれて、バンドラはコード分割、ツリーシェイクなどを含む、これまでになく多くのタスクのリストを実行してきた。リリースノートによると、場合によっては、バンドルがはるかに遅くなることがある (バンドルエンティティの数に比例するのではなく、指数的に成長する)、バンドラがエンティティを2パスする必要があるためである。
Snowpackは、それがどのように開始を高速にし、開発において速さを維持するかを説明する:
すべてのファイルは、線形に
input -> build -> output
ビルドパイプラインを通過してから、ブラウザ (またはプロダクション用にビルドしている場合は最終のビルドディレクトリ) に出力されます。複数ファイルのバンドルは、単一ファイルのビルドステップになります。
[…]
起動にバンドル作業は必要なく、サーバはすぐに起動します。最初のページの読み込み時に、Snowpackは最初に要求されたファイルを作成し、後で使用するためにそれらをキャッシュします。プロジェクトに100万の異なるファイルが含まれている場合でも、Snowpackは現在のページをロードするために必要なすべてのビルドファイルのみを実行します。これがSnowpackが高速を維持する方法です。
Snowpackには、TypeScriptとJSXサポート、ホットモジュール交換 (警告が適用される) 、CSSモジュール、カスタムルーティング、プロキシリクエストなどを提供する開発サーバが含まれている。js以外のファイル (Svelteファイルなど) はプラグインを介してサポートできる。Snowpackビルドを実行すると、同じ開発コードの作業コピーとなる静的なプロダクションビルドが生成される。最適化されたプロダクションビルドのために、Snowpack 2.0には、WebpackやParcelなどの他のバンドラと統合するための公式プラグインがある。
あるユーザがSnowpackのバンドルなしの差別化の側面 (実際のところ「バンドルなし」とはどういう意味ですか ? ) に疑問を呈し、ESMモジュールのファーストクラスサポート以外にWebpackとSnowpackの違いを理解できなかった一方で、Twitterでの最初の反応は肯定的であるようだ。ユーザchadhietela氏は述べた:
O(1) ビルドのアイデアは開発にとって正しいと私はますます信じています。エバーグリーンブラウザのサポートとネイティブインポートは、ツールを変える必要があります。
完全なリリースノートには、Snowpack 2.0に関する技術的な詳細がさらに多く含まれている。ドキュメントサイトでは、Snowpackの動作、概念、構成、ツール、プラグイン、および一般的なレシピの概要を説明している。
Snowpackは、MITライセンスを持つオープンソースプロジェクトである。貢献は大歓迎であり、貢献ガイドラインに従う必要がある。フィードバックは、プロジェクトのGitHubリポジトリを通してできる。