關於 node_modules 資料夾大小辯論的我的想法

我曾對於 node_modules 資料夾的大小感到懊惱。一個 JavaScript 應用程式怎麼可能在沒有我加入任何一行程式碼的情況下就有100、200MB的大小呢?我只是執行 npx create-react-app todolist,然後下載了218.7MB的東西!(我現在剛剛檢查了一下,這是真的數字)。

每當你思考 node_modules 的大小時,請想想我們程式開發人員投入的無數工時。

這是完全開源的軟體,是你可以檢視和學習的軟體。它是由世界各地的程式開發人員和公司慷慨捐贈的。它是一個全球性的努力,某人將它變得非常簡單好用。首先是 npm 這個工具,接著才是 npm 公司。

我們都同意將自己的程式碼發布到他們的伺服器上,人們在上面進一步建立了其他東西,直到我們得到了快速入門工具(如 create-react-app 或 Vue CLI 等),可以免費獲得大量功能。

在 TB 級快速儲存的時代,200MB 的大小算太大嗎?

請記住,在這個大小中,絕大多數是測試、文件等等。而且剩下的程式碼絕大多數只會在開發環境中使用。這並不意味著你會將一個200MB的應用程式提供給用戶,我認為這一點是深入人心的。

我以 create-react-app 為例,那 200MB 中有些什麼?

首先,create-react-app 包含了:

  • 編譯器 (Babel)
  • 打包工具 (Webpack)
  • 程式碼壓縮工具
  • 程式碼檢查工具 (ESLint)
  • 樣式流程工具 (SCSS)
  • 具有熱重載功能的開發伺服器
  • 測試執行工具 (Jest)

如果你想要開發 Mac 或 iPhone 應用程式,你必須安裝蘋果提供的 IDE,即 Xcode。Xcode 的大小(等一下……)幾乎是 14GB。那是 node_modules 的 70 倍大小。確實,我們在比較兩件不同的事物,但 node_modules 包含了你開始編寫程式碼所需的一切。你可以搭配大小為 200MB 的 VS Code 或大小為 30MB 的 Sublime Text 使用,都沒關係,並不是必須的(而你卻無法在沒有 Xcode 的情況下創建 iOS/macOS 應用程式)。

如果擔心硬碟被模組填滿,pnpm 是一個最佳解決方案,它將模組集中在一個位置並讓你的所有應用程式共用這些模組而不是建立自己的本地版本。例如,這是在線編程工具Glitch所使用的。

我曾經讀到有人在思考,如果我們的應用程式依賴太多他人編寫的程式碼,那麼如何對程式碼庫進行安全問題或其他問題的審查。

這是一個選擇,對吧?你並非被迫使用模組。你可以創建自己版本的工具,而不需要這些模組,但然後你就必須維護該程式碼、測試它、在需要更新時管理新版本,等等的工作。

我曾有機會使用其他程式語言和生態系統進行開發,在那裡 npm 的活力和機會本可以是一個福音,但相反地我不得不為每一件事情建立自己的小型函式庫,因為那些由第三方開發者分發的工具或者根本不存在,或者已經廢棄多年,且未與該語言的其他部分保持同步更新。

也許我們可以設置一個旗標,只下載生產碼而不是全部的文件、測試等等?但這只是一個現在閃過腦海的想法,不確定這是否可行。

總之:node_modules萬歲!