如果你正在構(gòu)建一個生產(chǎn)應用程序,你并不總是希望讓你項目的依賴項自動更新,即使您只指定了一個 PATCH 更新,由于有數(shù)百個互操作包,因此有可能出現(xiàn)未經(jīng)測試的更新會毀掉你的項目,那么你一樣要試試 save-exact。在開發(fā)過程中以及使用應用程序時,可以安全地允許補丁或次要更新。
我們先來看一個最簡單的測試,例如我在項目依賴了兩個包:
"devDependencies": { "@babel/cli": "^7.10.5", "@babel/plugin-transform-runtime": "^7.11.0"}
當刪除 node_modules 文件夾并運行時 npm install,已安裝軟件包的版本可能會在更高版本可用時更新,原因是安裝的依賴產(chǎn)生了滑動,這可能會破壞應用程序,不同版本的的特效可能存在不一致的場景,這其實是非常危險的。
圖片
圖片
^ 會匹配最新的大版本依賴包,比如 ^1.2.3 會匹配所有 1.x.x 的包,包括 1.3.0,但是不包括 2.0.0。
使用 save-exact 后,保存到 package.json 的依賴項將使用精確的版本進行配置,而不是使用 npm 的默認 semver 范圍運算符。
在項目中可以通過 .npmrc / .yarnrc 來對 save-exact 進行配置。
#.npmrcsave-exact=true
#.yarnrcsave-prefix ~
當我們再次安裝使用 yarn add react 時,你會發(fā)現(xiàn)不會有滑動版本。
圖片
.npmrc / .yarnrc 的配置是項目級別的。你也可以針對某一個依賴使用 save-exact。例如:
yarn add react --save-exact
圖片
這樣也能達到同樣的效果。并且你還可以通過設置用戶級別的 npm config 來達到效果。
npm config set save-exact true
不過這里需要注意的是,它們是有優(yōu)先級的。
除了命令行 save-exact,當我們在使用 npmrc 配置時,按照依賴會檢查配置,其實就是檢查 .npmrc 的配置,在我們的電腦中存在多個 .npmrc 的配置。
圖片
項目下 .npmrc 文件的優(yōu)先級最高,可以給每個項目配置不同的鏡像,項目之間的配置互不影響。 在項目的根目錄下新建 .npmrc 文件,在里面以 key=value 的格式進行配置。
save-exact=true
圖片
可以通過 npm config get userconfig 命令獲取用戶配置的 .npmrc 文件在哪里。
圖片
可以通過 npm config set 命令設置用戶級別的 .npmrc 配置。
npm config set registry https://registry.npm.taobao.org
如果想刪除可以直接編輯文件,或者使用 npm config delete registry 命令來進行刪除。
圖片
可以通過 npm config get prefix 命令獲取全局配置的 .npmrc 文件的前綴地址,
圖片
記住是前綴地址,不是完整地址。完整地址是{$prefix}/etc/npmrc。 但是如果你從來沒有全局配置過,就不會存在這個文件。 也可以通過命令行來進行全局 .npmrc 文件的配置。
npm config set registry https://registry.npm.taobao.org -g
npm 內(nèi)置 .npmrc 配置文件和 npm 同級,所以可以通過獲取 npm 的路徑,來找到 npm 內(nèi)置的 .npmrc 文件。 可以通過 which npm 來獲取 npm 的路徑,也就找到了 npm 內(nèi)置的 .npmrc 文件。
圖片
npm install 執(zhí)行之后,首先,檢查并獲取 npm 配置,這里的優(yōu)先級為:項目級的 .npmrc 文件 > 用戶級的 .npmrc 文件> 全局級的 .npmrc 文件 > npm 內(nèi)置的 .npmrc 文件。
當我們在執(zhí)行安裝命令之后,如果命令行中不包含 save-exact,然后檢查并獲取 npm 配置中的 save-exact,這里的優(yōu)先級為:項目級的 .npmrc 文件 > 用戶級的 .npmrc 文件> 全局級的 .npmrc 文件 > npm 內(nèi)置的 .npmrc 文件。
使用 save-exact 可以在項目安裝依賴時,保存到 package.json 的依賴項將使用精確的版本進行配置,而不是使用 npm 的默認 semver 范圍運算符。在開發(fā)過程中以及使用應用程序時,可以安全地允許補丁或次要更新。
https://docs.npmjs.com/cli/v10/commands/npm-install#save-exact
https://teamtreehouse.com/community/why-install-npm-packages-as-saveexact
https://stackoverflow.com/questions/58638817/what-is-the-purpose-of-using-save-exact
本文鏈接:http://www.tebozhan.com/showinfo-26-16518-0.html快試試 save exact,防止你的項目依賴版本滑動
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com