diff --git a/__tests__/commands/add.js b/__tests__/commands/add.js index 9f69035974..a3785ac53c 100644 --- a/__tests__/commands/add.js +++ b/__tests__/commands/add.js @@ -223,6 +223,17 @@ test.concurrent('add save-prefix should not expand ~ to home dir', (): Promise => { + return runAdd(['left-pad'], {}, 'install-strict-all', async config => { + const lockfile = explodeLockfile(await fs.readFile(path.join(config.cwd, 'yarn.lock'))); + + expect(lockfile[0]).toMatch(/^left-pad@\d+\.\d+\.\d+:$/); + expect(JSON.parse(await fs.readFile(path.join(config.cwd, 'package.json'))).dependencies['left-pad']).toMatch( + /^\d+\.\d+\.\d+$/, + ); + }); +}); + test.concurrent('add with new dependency should be deterministic 3', (): Promise => { return runAdd([], {}, 'install-should-cleanup-when-package-json-changed-3', async (config, reporter) => { // expecting yarn check after installation not to fail diff --git a/__tests__/fixtures/add/install-strict-all/.yarnrc b/__tests__/fixtures/add/install-strict-all/.yarnrc new file mode 100644 index 0000000000..2e2098e184 --- /dev/null +++ b/__tests__/fixtures/add/install-strict-all/.yarnrc @@ -0,0 +1,2 @@ +yarn-offline-mirror "./mirror-for-offline" +save-exact true diff --git a/src/cli/commands/add.js b/src/cli/commands/add.js index 68f82e323b..85f65518d9 100644 --- a/src/cli/commands/add.js +++ b/src/cli/commands/add.js @@ -69,7 +69,9 @@ export class Add extends Install { * returns version for a pattern based on Manifest */ getPatternVersion(pattern: string, pkg: Manifest): string { - const {exact, tilde} = this.flags; + const tilde = this.flags.tilde; + const configPrefix = String(this.config.getOption('save-prefix')); + const exact = this.flags.exact || Boolean(this.config.getOption('save-exact')) || configPrefix === ''; const {hasVersion, range} = normalizePattern(pattern); let version; @@ -86,7 +88,7 @@ export class Add extends Install { } else if (exact) { prefix = ''; } else { - prefix = String(this.config.getOption('save-prefix')) || '^'; + prefix = configPrefix || '^'; } version = `${prefix}${pkg.version}`;