diff --git a/src/registries/base-registry.js b/src/registries/base-registry.js index ea47bad6a1..abc61a45e9 100644 --- a/src/registries/base-registry.js +++ b/src/registries/base-registry.js @@ -64,6 +64,16 @@ export default class BaseRegistry { return this.config[key]; } + getAvailableRegistries(): Array { + let config = this.config + return Object.keys(config).reduce((registries, option) => { + if (option.split(':')[1] === 'registry') { + registries.push(config[option]) + } + return registries + }, []) + } + loadConfig(): Promise { return Promise.resolve(); } diff --git a/src/registries/npm-registry.js b/src/registries/npm-registry.js index ed8495aa4f..ad7a3987d4 100644 --- a/src/registries/npm-registry.js +++ b/src/registries/npm-registry.js @@ -141,8 +141,11 @@ export default class NpmRegistry extends Registry { getRegistry(packageName: string): string { // Try extracting registry from the url, then scoped registry, and default registry if (packageName.match(/^https?:/)) { - const parts = url.parse(packageName); - return parts.protocol + '//' + parts.host + '/'; + const availableRegistries = this.getAvailableRegistries() + const registry = availableRegistries.find(registry => packageName.startsWith(registry)) + if (registry) { + return registry + } } for (const scope of [this.getScope(packageName), '']) {