Affects Version/s: 8.0.0
Fix Version/s: None
cordova (Cordova CLI) : 8.0.0
Android SDK Tools : 26.1.1
ios-deploy : 1.9.2
ios-sim : 6.0.0
Node : v8.11.3
npm : 6.2.0
OS : macOS High Sierra
Xcode : Xcode 9.4.1 Build version 9F2000
When installing plugins with an exact version (no semver prefixes) and save-exact is specified either on the command line or via the global config (e.g. cordova config), cordova-lib 8.0.0 modifies package.json and config.xml with semver prefixes.
The problem is that cli.js records the option in an object with a key of "save_exact", but in src/cordova/plugin/add.js of cordova-lib, keys of the propagated options object from cli.js are copied into another fetch options object for the plugman fetch. However, save-exact is copied into the new options object by referencing the key "save-exact" instead of "save_exact", which is how it was initially stored in cli.js. Since the referenced key doesn't exist, save-exact will be undefined (i.e. false) when passed to plugman.fetch and therefore ignored.
This affects both the "--save-exact" command line flag and the save-exact attribute in the cordova global config.
The fix is to change "save-exact" to "save_exact" on lines 90 and 125 of src/cordova/plugin/add.js in cordova-lib. When I make these changes locally, save-exact works properly.