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