Parcel 2 alpha 1 已推出!

Parcel 2.0.0-alpha.1 已推出!

今天我非常興奮地發布 Parcel 2 的第一個 alpha 版本!請試用看看,並協助我們將 Parcel 2 推向終點。在 GitHub 上查看!

Parcel 2 是我們花了一年多時間從頭改寫 Parcel,並在之前花了一年時間設計的成果。它包含了我們從一開始就建置 Parcel 以來所學到的一切,而結果比 Parcel 1 更具可擴充性可擴充性可靠性,同時保留了您對 Parcel 所期待的易用性和開發人員體驗

組態

#

Parcel 以無需組態而聞名。這並不表示無法組態,只是 Parcel 嘗試從程式碼本身推論出盡可能多的資訊,並使用其他工具的現有組態檔案(例如 .babelrc)。使用者喜愛它提供的易用性和開發人員體驗,但總是有一些特殊情況和實際用例需要更進一步的客製化。

Parcel 2 是可選組態。內建於 Parcel 2 CLI 的預設組態對於大多數應用程式來說已經足夠,而且包含 Parcel 1 支援的所有功能,以及更多內容,但 Parcel 2 支援透過專門為 Parcel 的每個核心階段設計的一組完整的外掛程式類型來擴充核心功能。

所有這些都設定在一個稱為 .parcelrc 的非常簡單的 JSON 檔案中。如果您需要設定 Parcel,則不需要 JavaScript 或複雜的邏輯。您也可以延伸其他設定,並將它們作為 npm 套件分享。我們預期大多數設定會延伸 @parcel/config-default 套件,以視需要新增或覆寫部分內建預設值。

例如,以下是您在發佈 parcel-transform-dart 套件後,如何為您的應用程式新增 Dart 轉換的方式。

{
  "extends": ["[@parcel/config-default](http://twitter.com/parcel/config-default)"],
  "transforms": {
    "*.dart": ["parcel-transform-dart"],
  }
}

小型核心

#

由於 Parcel 中的所有內容都已拆分為外掛,因此 Parcel 核心非常小。現在它基本上只會根據應用程式中檔案的圖表,以非常刻意且最佳化的方式,視需要執行其他工具。所有內容都設計為平行執行且可快取,無論是本機還是最終跨機器執行。

Parcel 維護著整個應用程式的最佳化圖表,可以非常精細地失效,僅在變更時觸發重建真正需要的部分。這包括你的程式碼,以及所有影響該程式碼建置方式的內容,例如組態檔(例如 .babelrc)、外掛版本等等。當 Parcel 停止時,整個圖表會快取在磁碟上,並可以在啟動時還原,並精細地失效,以便僅重建已變更的檔案。這就像監控模式,但即使在 Parcel 重新啟動時也是如此!

一個 Parcel 資產圖表,顯示一個具有多個目標的建置(見下文)。一個 Parcel 資產圖表,顯示一個具有多個目標的建置(見下文)。

工作人員農場已更新,以利用新的 worker_threads 模組,該模組內建於 Node 12(如果可用),其開銷低於先前版本中使用的多處理程序後端。此外,我們已抽象化 Parcel 中的所有檔案系統存取,以便可以使用不同的檔案系統實作進行插入。例如,你可能想使用記憶體中的檔案系統在瀏覽器中執行 Parcel。

多個目標和套件分割

#

除了全新的核心和外掛系統外,Parcel 2 還具有一系列新功能,包括支援多個目標套件分割

Parcel 2 允許你為多個目標設定建置,這些目標將並行建置。例如,你可能想為具有現代語法的現代瀏覽器建置一個應用程式版本,並為具有更多轉譯的舊版瀏覽器建置一個版本。或者,你可能想為節點和瀏覽器建置一個函式庫。現在,你可以透過在 package.json 中設定目標來執行此操作,並執行更多操作。

以下範例將產生兩個完整的建置,針對最近的 Chrome 版本和更多舊版瀏覽器編譯。然後,可以使用差異載入技術載入這些建置,以減少現代瀏覽器的套件大小。

{
  "browser": "dist/legacy/index.js",
  "browserModern": "dist/modern/index.js",
  "targets": {
    "browserModern": {
      "engines": {
        "browsers": [
          "last 1 Chrome version"
        ]
      }
    },
    "browser": {
      "engines": {
        "browsers": [
          "> 0.25%"
        ]
      }
    }
  }
}

在本地開發中,為了效能,我們透過編譯為預設的現代瀏覽器目標來避免這項額外的作業。這表示當您只在 Chrome 中測試時,Babel 和其他工具需要執行較少的工作來轉譯您的程式碼。如果您需要測試特定目標(例如舊瀏覽器,如 IE 11),您可以選擇使用 CLI 的 --target 選項為該目標進行建置。

Parcel 2 也支援進階的套件最佳化,這會自動將 react 和其他函式庫等常見相依性拆分到它們自己的套件中,這些套件可以並行載入,並與您的程式碼的其他部分分開快取。這應該會產生比 Parcel 1 更小的初始套件大小,因為當進入套件不需要它們時,它不再會將常見相依性提升到樹狀結構的頂端。

整個應用程式套件化

#

從一開始,Parcel 就比許多其他工具更進一步,套件化您的整個應用程式,包括 JavaScript、CSS、HTML 和靜態資源。大多數其他套件化器仍然非常專注於 JavaScript,並將所有資源類型轉換為 JS,可能稍後再使用其他外掛程式將它們再次萃取出來。Parcel 對於檔案類型沒有偏好,而 Parcel 2 更進一步,允許您覆寫和組合您的程式碼處理方式的每個面向。

Parcel 2 外掛程式被組織成管線,可以非常容易地組合,以指定進階轉換和建置步驟。資源會透過 glob 與初始管線相符,並執行該管線中的所有外掛程式,直到檔案類型變更(例如 .ts → .js)。然後,它們會繼續透過下一個管線,依此類推,直到管線的結尾。這允許個別外掛程式專注於單一任務,並讓使用者組合多個外掛程式以執行更複雜的任務。

轉換也可以輸出多個資源,以防有不同類型的內嵌資源,例如 HTML 檔案中的內嵌 <script><style> 標籤、多部分 Vue SFC,或其他尚未發明的多部分檔案類型。這些內嵌資源的處理方式與個別檔案相同,並且可以在它們各自的管線處理後,重新插入它們來自的檔案中。

這種彈性和可組合性在 JavaScript 捆綁器中前所未見,我非常期待看到 Parcel 上建置的哪些新型工具!

團隊

#

沒有辛勤不懈打造 Parcel 2 的核心團隊,它就不可能問世!

感謝 Atlassian 對 Parcel 的大量投資,並全職贊助上述兩位開發人員(瑪雅和威爾)。也要感謝所有捐款給我們的 開放集體 的人,這真的幫助 Parcel 成為可能。 😍

試試看,並幫助我們到達終點線!

#

你可以使用 yarn add parcel@v2 安裝 Parcel 2 來試試看。自述文件中提供了 入門指南。CLI 大多與 Parcel 1 相容,但你可能會在這個早期版本中遇到一些差異。另外請注意,你使用的任何 Parcel 1 外掛程式在 Parcel 2 中都不會再起作用,需要移植。

這是 Parcel 2 的第一個 alpha 版本,由於是 alpha 版本,因此會有錯誤和遺失的功能。特別是,許多外掛程式尚未從 Parcel 1 移植到 Parcel 2。如果你想幫忙,請隨時查看 v2 分支 上現有的外掛程式以獲得靈感(我們將在 Parcel 2 的最終版本中提供完整的文件),以及 GitHub 上的 Parcel 2 標籤。那裡的一些問題也標記為「良好的第一個問題」,將是一個不錯的起點。

請在 GitHub 上 回報你發現的任何錯誤。你也可以在 Twitter 上找到我 @devongovett