Skip to content

Commit

Permalink
feat: ask for whether to use taobao registry when getting versions (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
zyy7259 authored and yyx990803 committed May 12, 2018
1 parent ee9432d commit 8fbbd35
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 69 deletions.
3 changes: 1 addition & 2 deletions packages/@vue/cli/lib/util/getVersions.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ module.exports = async function getVersions () {
latest = process.env.VUE_CLI_LATEST_VERSION = current
} else {
const request = require('./request')
const options = require('../options').loadOptions()
const registry = options.useTaobaoRegistry
const registry = (await require('./shouldUseTaobao')())
? `https://registry.npm.taobao.org`
: `https://registry.npmjs.org`

Expand Down
69 changes: 2 additions & 67 deletions packages/@vue/cli/lib/util/installDeps.js
Original file line number Diff line number Diff line change
@@ -1,78 +1,13 @@
const request = require('./request')
const chalk = require('chalk')
const execa = require('execa')
const readline = require('readline')
const inquirer = require('inquirer')
const { loadOptions, saveOptions } = require('../options')
const { pauseSpinner, resumeSpinner } = require('@vue/cli-shared-utils')
const registries = require('./registries')
const shouldUseTaobao = require('./shouldUseTaobao')

const debug = require('debug')('vue-cli:install')

const registries = {
npm: 'https://registry.npmjs.org',
yarn: 'https://registry.yarnpkg.com',
taobao: 'https://registry.npm.taobao.org'
}
const taobaoDistURL = 'https://npm.taobao.org/dist'

async function ping (registry) {
await request.get(`${registry}/vue-cli-version-marker/latest`)
return registry
}

function removeSlash (url) {
return url.replace(/\/$/, '')
}

let checked
let result
async function shouldUseTaobao () {
// ensure this only gets called once.
if (checked) return result
checked = true

// previously saved preference
const saved = loadOptions().useTaobaoRegistry
if (typeof saved === 'boolean') {
return (result = saved)
}

const save = val => {
result = val
saveOptions({ useTaobaoRegistry: val })
return val
}

const userCurrent = (await execa(`npm`, ['config', 'get', 'registry'])).stdout
const defaultRegistry = registries.npm
if (removeSlash(userCurrent) !== removeSlash(defaultRegistry)) {
// user has configured custom regsitry, respect that
return save(false)
}
const faster = await Promise.race([
ping(defaultRegistry),
ping(registries.taobao)
])

if (faster !== registries.taobao) {
// default is already faster
return save(false)
}

// ask and save preference
pauseSpinner()
const { useTaobaoRegistry } = await inquirer.prompt([{
name: 'useTaobaoRegistry',
type: 'confirm',
message: chalk.yellow(
` Your connection to the the default npm registry seems to be slow.\n` +
` Use ${chalk.cyan(registries.taobao)} for faster installation?`
)
}])
resumeSpinner()
return save(useTaobaoRegistry)
}

function toStartOfLine (stream) {
if (!chalk.supportsColor) {
stream.write('\r')
Expand Down
7 changes: 7 additions & 0 deletions packages/@vue/cli/lib/util/registries.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const registries = {
npm: 'https://registry.npmjs.org',
yarn: 'https://registry.yarnpkg.com',
taobao: 'https://registry.npm.taobao.org'
}

module.exports = registries
65 changes: 65 additions & 0 deletions packages/@vue/cli/lib/util/shouldUseTaobao.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
const chalk = require('chalk')
const execa = require('execa')
const request = require('./request')
const inquirer = require('inquirer')
const registries = require('./registries')
const { loadOptions, saveOptions } = require('../options')

async function ping (registry) {
await request.get(`${registry}/vue-cli-version-marker/latest`)
return registry
}

function removeSlash (url) {
return url.replace(/\/$/, '')
}

let checked
let result

module.exports = async function shouldUseTaobao () {
// ensure this only gets called once.
if (checked) return result
checked = true

// previously saved preference
const saved = loadOptions().useTaobaoRegistry
if (typeof saved === 'boolean') {
return (result = saved)
}

const save = val => {
result = val
saveOptions({ useTaobaoRegistry: val })
return val
}

const userCurrent = (await execa(`npm`, ['config', 'get', 'registry'])).stdout
const defaultRegistry = registries.npm
if (removeSlash(userCurrent) !== removeSlash(defaultRegistry)) {
// user has configured custom regsitry, respect that
return save(false)
}
const faster = await Promise.race([
ping(defaultRegistry),
ping(registries.taobao)
])

if (faster !== registries.taobao) {
// default is already faster
return save(false)
}

// ask and save preference
const { useTaobaoRegistry } = await inquirer.prompt([
{
name: 'useTaobaoRegistry',
type: 'confirm',
message: chalk.yellow(
` Your connection to the the default npm registry seems to be slow.\n` +
` Use ${chalk.cyan(registries.taobao)} for faster installation?`
)
}
])
return save(useTaobaoRegistry)
}

0 comments on commit 8fbbd35

Please sign in to comment.