diff --git a/lib/manager/npm/post-update/npm.spec.ts b/lib/manager/npm/post-update/npm.spec.ts index 83081050bd8c947333e10d0f6166cc4c27c2b572..ddfb3666f3bba2c871e4b32e9dc2c1085578e9cf 100644 --- a/lib/manager/npm/post-update/npm.spec.ts +++ b/lib/manager/npm/post-update/npm.spec.ts @@ -166,7 +166,7 @@ describe('generateLockFile', () => { 'some-dir', {}, 'package-lock.json', - { binarySource: BinarySource.Docker } + { binarySource: BinarySource.Docker, compatibility: { npm: '^6.0.0' } } ); expect(fs.readFile).toHaveBeenCalledTimes(1); expect(res.lockFile).toEqual('package-lock-contents'); diff --git a/lib/manager/npm/post-update/npm.ts b/lib/manager/npm/post-update/npm.ts index d1bd9163368accf15adfc0d2c16e8363632cbab8..e597371b140a2167b2319abef4c59457301c9c36 100644 --- a/lib/manager/npm/post-update/npm.ts +++ b/lib/manager/npm/post-update/npm.ts @@ -1,4 +1,6 @@ import { move, pathExists, readFile } from 'fs-extra'; +import { validRange } from 'semver'; +import { quote } from 'shlex'; import { join } from 'upath'; import { SYSTEM_INSUFFICIENT_DISK_SPACE } from '../../../constants/error-messages'; import { logger } from '../../../logger'; @@ -24,7 +26,12 @@ export async function generateLockFile( let lockFile = null; try { - const preCommands = ['npm i -g npm']; + let installNpm = 'npm i -g npm'; + const npmCompatibility = config.compatibility?.npm; + if (validRange(npmCompatibility)) { + installNpm += `@${quote(npmCompatibility)}`; + } + const preCommands = [installNpm]; const commands = []; let cmdOptions = ''; if (