如果您正在開發具有大量 npm 套件的 Node.js 應用程序,則在構建項目時遇到警告或錯誤的情況並不少見,如果一個或多個包已更新。 有時,會導致版本衝突,或套件版本已被取代。 以下是一些快速提示,可協助您設定 package.json 檔案,並瞭解看到警告或錯誤時發生的情況。 這不是完整的 package.json 指南,僅關注 npm 套件版本控制。
npm 套件版本控制系統有嚴格的規則。 版本格式如下:
[major].[minor].[patch]
假設您的應用程式中有一個版本為 5.2.1 的套件。 主要版本為 5,次要版本為 2,補丁為 1。
- 在主要版本更新中,套件包含向後不相容的新功能,即指具破壞性變更。
- 在次要版本更新中,已將新功能新增至套件,這些功能與舊版套件版本回溯相容。
- 在修補程式更新中,會包含一或多個錯誤修正。 錯誤修復始終向後兼容。
值得注意的是,一些 npm 套件功能具有依賴關係。 例如,要將 TypeScript 編譯器套件 (ts-loader) 的新功能與 webpack 一起使用,您可能還需要更新 webpack npm 套件和 webpack-cli 套件。
為了協助管理套件版本控制,npm 支援數種表示法,您可以在 package.json中使用。 您可以使用這些標記來控制要在應用程式中接受的套件更新類型。
假設您正在使用 React,並且需要包含 react 和 react-dom npm 套件。 您可以在 package.json 檔案中以數種方式指定。 例如,您可以指定套件的確切版本的使用,如下所示。
"dependencies": {
"react": "16.4.2",
"react-dom": "16.4.2",
},
使用上述表示法,npm 將始終獲得指定的確切版本 16.4.2。
您可以使用特殊表示法將更新限制為修補程式更新(錯誤修復)。 在此範例中:
"dependencies": {
"react": "~16.4.2",
"react-dom": "~16.4.2",
},
您可以使用波浪號(~)字元來指示 npm 僅在套件被修補時更新。 因此,npm 可以將 react 16.4.2 更新到 16.4.3(或 16.4.4 等),但它不會接受對主要或次要版本的更新。 因此,16.4.2 不會更新到 16.5.0。
您也可以使用插入符號 (^) 符號來指定 npm 可以更新次要版本號碼。
"dependencies": {
"react": "^16.4.2",
"react-dom": "^16.4.2",
},
使用這種表示法,npm 可以將 react 16.4.2 更新到 16.5.0(或 16.5.1、16.6.0 等),但它不會接受主要版本的更新。 因此,16.4.2 不會更新到 17.0.0。
當 npm 更新套件時,它會產生一個 package-lock.json 檔案,其中列出了應用程式中使用的實際 npm 套件版本,包括所有巢狀套件。 雖然 package.json 控制應用程式的直接依附元件,但不會控制巢狀依附元件 (特定 npm 套件所需的其他 npm 套件)。 如果您需要確定其他開發人員和測試人員正在使用您正在使用的確切套件,包括巢狀套件,您可以在開發週期中使用 package-lock.json 檔案。 如需詳細資訊,請參閱 npm 文件中的 package-lock.json 。
針對 Visual Studio, package-lock.json 檔案不會新增至您的專案,但您可以在專案資料夾中找到它。