diff --git a/lib/manager/npm/lookup/index.js b/lib/manager/npm/lookup/index.js
index 2e25482e8baa4ae5860b61ee18562e48ffd427ff..5bf108c9a65cb6bdbf5b0aa5ba8b769cdeec7310 100644
--- a/lib/manager/npm/lookup/index.js
+++ b/lib/manager/npm/lookup/index.js
@@ -1,7 +1,7 @@
 const versioning = require('../../../versioning/semver');
 const moment = require('moment');
 const { getRollbackUpdate } = require('./rollback');
-
+const { getRangeStrategy } = require('./range');
 const { filterVersions } = require('./filter');
 
 const {
@@ -20,7 +20,7 @@ module.exports = {
 };
 
 function lookupUpdates(dependency, config) {
-  const { currentVersion, lockedVersion, rangeStrategy } = config;
+  const { currentVersion, lockedVersion } = config;
   const { latestVersion } = dependency;
   const allVersions = Object.keys(dependency.versions);
   if (allVersions.length === 0) {
@@ -41,7 +41,7 @@ function lookupUpdates(dependency, config) {
   }
   const fromVersion = getFromVersion(
     currentVersion,
-    rangeStrategy,
+    getRangeStrategy(config),
     lockedVersion,
     allVersions
   );
diff --git a/lib/manager/npm/lookup/range.js b/lib/manager/npm/lookup/range.js
new file mode 100644
index 0000000000000000000000000000000000000000..796226788710110c891e1c4a597e456962fea7fe
--- /dev/null
+++ b/lib/manager/npm/lookup/range.js
@@ -0,0 +1,45 @@
+const { parseRange } = require('semver-utils');
+
+module.exports = {
+  getRangeStrategy,
+};
+
+function getRangeStrategy(config) {
+  const {
+    depType,
+    depName,
+    packageJsonType,
+    currentVersion,
+    rangeStrategy,
+  } = config;
+  const isComplexRange = parseRange(currentVersion).length > 1;
+  if (rangeStrategy === 'bump' && isComplexRange) {
+    logger.info(
+      { currentVersion },
+      'Replacing bump strategy for complex range with widen'
+    );
+    return 'widen';
+  }
+  if (rangeStrategy !== 'auto') {
+    return rangeStrategy;
+  }
+  if (depType === 'devDependencies') {
+    // Always pin devDependencies
+    logger.debug({ depName }, 'Pinning devDependency');
+    return 'pin';
+  }
+  if (depType === 'dependencies' && packageJsonType === 'app') {
+    // Pin dependencies if we're pretty sure it's not a browser library
+    logger.debug('Pinning app dependency');
+    return 'pin';
+  }
+  if (depType === 'peerDependencies') {
+    // Widen peer dependencies
+    logger.debug('Widening peer dependencies');
+    return 'widen';
+  }
+  if (isComplexRange) {
+    return 'widen';
+  }
+  return 'replace';
+}
diff --git a/lib/manager/npm/package.js b/lib/manager/npm/package.js
index d6cae10aa65cdc02c91d8b81fc3205308b41aa4c..19963ff9ec8f89bf4d8bc5b7a42b7b0b5f076922 100644
--- a/lib/manager/npm/package.js
+++ b/lib/manager/npm/package.js
@@ -2,53 +2,11 @@ const npmApi = require('../../datasource/npm');
 const lookup = require('./lookup');
 const { isValid } = require('../../versioning/semver');
 const nodeManager = require('../_helpers/node/package');
-const { parseRange } = require('semver-utils');
 
 module.exports = {
-  getRangeStrategy,
   getPackageUpdates,
 };
 
-function getRangeStrategy(config) {
-  const {
-    depType,
-    depName,
-    packageJsonType,
-    currentVersion,
-    rangeStrategy,
-  } = config;
-  const isComplexRange = parseRange(currentVersion).length > 1;
-  if (rangeStrategy === 'bump' && isComplexRange) {
-    logger.info(
-      { currentVersion },
-      'Replacing bump strategy for complex range with widen'
-    );
-    return 'widen';
-  }
-  if (rangeStrategy !== 'auto') {
-    return rangeStrategy;
-  }
-  if (depType === 'devDependencies') {
-    // Always pin devDependencies
-    logger.debug({ depName }, 'Pinning devDependency');
-    return 'pin';
-  }
-  if (depType === 'dependencies' && packageJsonType === 'app') {
-    // Pin dependencies if we're pretty sure it's not a browser library
-    logger.debug('Pinning app dependency');
-    return 'pin';
-  }
-  if (depType === 'peerDependencies') {
-    // Widen peer dependencies
-    logger.debug('Widening peer dependencies');
-    return 'widen';
-  }
-  if (isComplexRange) {
-    return 'widen';
-  }
-  return 'replace';
-}
-
 async function getPackageUpdates(config) {
   logger.trace({ config }, `npm.getPackageUpdates()`);
   const { depType, depName, currentVersion } = config;
@@ -76,17 +34,13 @@ async function getPackageUpdates(config) {
     logger.debug(results[0].message);
     return results;
   }
-  const rangeStrategy = getRangeStrategy(config);
   npmApi.setNpmrc(
     config.npmrc,
     config.global ? config.global.exposeEnv : false
   );
   const npmDep = await npmApi.getDependency(depName);
   if (npmDep) {
-    results = lookup.lookupUpdates(npmDep, {
-      ...config,
-      rangeStrategy,
-    });
+    results = lookup.lookupUpdates(npmDep, config);
     if (results.length > 0) {
       logger.info(
         { dependency: depName },
diff --git a/test/manager/npm/lookup/range.spec.js b/test/manager/npm/lookup/range.spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..3891f1778b7918142b4d67b84605402c6dfa7960
--- /dev/null
+++ b/test/manager/npm/lookup/range.spec.js
@@ -0,0 +1,46 @@
+const {
+  getRangeStrategy,
+} = require('../../../../lib/manager/npm/lookup/range');
+
+describe('getRangeStrategy', () => {
+  it('returns same if not auto', () => {
+    const config = { rangeStrategy: 'widen' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('pins devDependencies', () => {
+    const config = { rangeStrategy: 'auto', depType: 'devDependencies' };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('pins app dependencies', () => {
+    const config = {
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      packageJsonType: 'app',
+    };
+    expect(getRangeStrategy(config)).toEqual('pin');
+  });
+  it('widens peerDependencies', () => {
+    const config = { rangeStrategy: 'auto', depType: 'peerDependencies' };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('widens complex ranges', () => {
+    const config = {
+      rangeStrategy: 'auto',
+      depType: 'dependencies',
+      currentVersion: '^1.6.0 || ^2.0.0',
+    };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('widens complex bump', () => {
+    const config = {
+      rangeStrategy: 'bump',
+      depType: 'dependencies',
+      currentVersion: '^1.6.0 || ^2.0.0',
+    };
+    expect(getRangeStrategy(config)).toEqual('widen');
+  });
+  it('defaults to replace', () => {
+    const config = { rangeStrategy: 'auto', depType: 'dependencies' };
+    expect(getRangeStrategy(config)).toEqual('replace');
+  });
+});
diff --git a/test/manager/npm/package.spec.js b/test/manager/npm/package.spec.js
index 162124db68579f70a7797ae56572f5b803740c71..7db607dcbf519bfb0d6489e01b73e472de38599e 100644
--- a/test/manager/npm/package.spec.js
+++ b/test/manager/npm/package.spec.js
@@ -8,48 +8,6 @@ jest.mock('../../../lib/manager/_helpers/node/package');
 npmApi.getDependency = jest.fn();
 
 describe('lib/manager/npm/package', () => {
-  describe('getRangeStrategy', () => {
-    it('returns same if not auto', () => {
-      const config = { rangeStrategy: 'widen' };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('pins devDependencies', () => {
-      const config = { rangeStrategy: 'auto', depType: 'devDependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('pin');
-    });
-    it('pins app dependencies', () => {
-      const config = {
-        rangeStrategy: 'auto',
-        depType: 'dependencies',
-        packageJsonType: 'app',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('pin');
-    });
-    it('widens peerDependencies', () => {
-      const config = { rangeStrategy: 'auto', depType: 'peerDependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('widens complex ranges', () => {
-      const config = {
-        rangeStrategy: 'auto',
-        depType: 'dependencies',
-        currentVersion: '^1.6.0 || ^2.0.0',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('widens complex bump', () => {
-      const config = {
-        rangeStrategy: 'bump',
-        depType: 'dependencies',
-        currentVersion: '^1.6.0 || ^2.0.0',
-      };
-      expect(npm.getRangeStrategy(config)).toEqual('widen');
-    });
-    it('defaults to replace', () => {
-      const config = { rangeStrategy: 'auto', depType: 'dependencies' };
-      expect(npm.getRangeStrategy(config)).toEqual('replace');
-    });
-  });
   describe('getPackageUpdates', () => {
     let config;
     beforeEach(() => {