問題
在一個 Ionic 項目中,使用 cordova platform add ... --save
命令后筒严,package.json 文件中對應的 Cordova 插件 cordova-plugin-xxx
的版本號總是會自動添加一個前綴符號 ^
碗降。
比如"cordova-plugin-touch-id": "3.4.0"
會自動變成"cordova-plugin-touch-id": "^3.4.0"
。
探究
先搞清楚,版本號的前綴^
作用是什么呢牛哺?
眾所周知,運行 npm install
命令時劳吠,將按照 package.json 安裝指定版本的依賴包引润。但如果我們不想指定依賴包的確切版本的時候,就可以使用前綴符號 ^
或 ~
指定版本的范圍痒玩。
-
^
:比如^1.2.5
淳附,代表版本范圍1.*.*
-
~
:比如~1.2.5
议慰,代表版本范圍1.2.*
版本號的三位數(shù)字代表的意義可以參考文章底部的推薦閱讀文章。
其實cordova platform add ... --save
命令執(zhí)行過程中奴曙,會添加對應 platform 和插件到項目中别凹。安裝插件的時候,優(yōu)先獲取 package.json 中的版本號洽糟,其次才是 config.xml 中的配置炉菲。所以我并不想擴大這些依賴包的版本范圍,而是希望保持 package.json 中指定的確切版本坤溃。
解決
所以颁督,怎么避免自動添加前綴?
npm 在使用 --save 更新 package.json 時浇雹,默認使用前綴 ^
沉御。修改方法如下:
- 默認使用前綴
~
:npm config set save-prefix '~'
- 不使用前綴,保存確切版本 :
npm config set save-exact true
綜上昭灵,終于解決了每次自動添加^
符號的惱人問題吠裆。
參考閱讀
Semver explained - why is there a caret (^) in my package.json?