diff --git a/lib/manager/npm/extract/index.js b/lib/manager/npm/extract/index.js index ee0f113a7e9aa383272a042672ffd1def9fcbec0..0bf83673152c73ab1483ecd1d50bb660680df194 100644 --- a/lib/manager/npm/extract/index.js +++ b/lib/manager/npm/extract/index.js @@ -58,7 +58,15 @@ async function extractDependencies(content, packageFile, config) { npmrc = await platform.getFile( upath.join(path.dirname(packageFile), '.npmrc') ); - if (!npmrc) { + if (npmrc) { + if ( + npmrc.includes('=${') && + !(config.global && config.global.exposeEnv) + ) { + logger.info('Discarding .npmrc file with variables'); + npmrc = undefined; + } + } else { npmrc = undefined; } } diff --git a/test/manager/npm/extract/index.spec.js b/test/manager/npm/extract/index.spec.js index ff50edd003af3918a052b6e7223e5ffd5bd0100f..9feba1afad17095989fdad5e32b713fac74e006e 100644 --- a/test/manager/npm/extract/index.spec.js +++ b/test/manager/npm/extract/index.spec.js @@ -75,6 +75,21 @@ describe('manager/npm/extract', () => { ); expect(res).toMatchSnapshot(); }); + it('finds and discards .npmrc', async () => { + platform.getFile = jest.fn(fileName => { + if (fileName === '.npmrc') { + // eslint-disable-next-line + return '//registry.npmjs.org/:_authToken=${NPM_AUTH_TOKEN}\n'; + } + return null; + }); + const res = await npmExtract.extractDependencies( + input01Content, + 'package.json', + { global: {} } + ); + expect(res.npmrc).toBeUndefined(); + }); it('finds lerna', async () => { platform.getFile = jest.fn(fileName => { if (fileName === 'lerna.json') {