Skip to content

Commit 8fbbd35

Browse files
zyy7259yyx990803
authored andcommitted
feat: ask for whether to use taobao registry when getting versions (#1273)
1 parent ee9432d commit 8fbbd35

File tree

4 files changed

+75
-69
lines changed

4 files changed

+75
-69
lines changed

Diff for: packages/@vue/cli/lib/util/getVersions.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ module.exports = async function getVersions () {
99
latest = process.env.VUE_CLI_LATEST_VERSION = current
1010
} else {
1111
const request = require('./request')
12-
const options = require('../options').loadOptions()
13-
const registry = options.useTaobaoRegistry
12+
const registry = (await require('./shouldUseTaobao')())
1413
? `https://registry.npm.taobao.org`
1514
: `https://registry.npmjs.org`
1615

Diff for: packages/@vue/cli/lib/util/installDeps.js

+2-67
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,13 @@
1-
const request = require('./request')
21
const chalk = require('chalk')
32
const execa = require('execa')
43
const readline = require('readline')
5-
const inquirer = require('inquirer')
6-
const { loadOptions, saveOptions } = require('../options')
7-
const { pauseSpinner, resumeSpinner } = require('@vue/cli-shared-utils')
4+
const registries = require('./registries')
5+
const shouldUseTaobao = require('./shouldUseTaobao')
86

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

11-
const registries = {
12-
npm: 'https://registry.npmjs.org',
13-
yarn: 'https://registry.yarnpkg.com',
14-
taobao: 'https://registry.npm.taobao.org'
15-
}
169
const taobaoDistURL = 'https://npm.taobao.org/dist'
1710

18-
async function ping (registry) {
19-
await request.get(`${registry}/vue-cli-version-marker/latest`)
20-
return registry
21-
}
22-
23-
function removeSlash (url) {
24-
return url.replace(/\/$/, '')
25-
}
26-
27-
let checked
28-
let result
29-
async function shouldUseTaobao () {
30-
// ensure this only gets called once.
31-
if (checked) return result
32-
checked = true
33-
34-
// previously saved preference
35-
const saved = loadOptions().useTaobaoRegistry
36-
if (typeof saved === 'boolean') {
37-
return (result = saved)
38-
}
39-
40-
const save = val => {
41-
result = val
42-
saveOptions({ useTaobaoRegistry: val })
43-
return val
44-
}
45-
46-
const userCurrent = (await execa(`npm`, ['config', 'get', 'registry'])).stdout
47-
const defaultRegistry = registries.npm
48-
if (removeSlash(userCurrent) !== removeSlash(defaultRegistry)) {
49-
// user has configured custom regsitry, respect that
50-
return save(false)
51-
}
52-
const faster = await Promise.race([
53-
ping(defaultRegistry),
54-
ping(registries.taobao)
55-
])
56-
57-
if (faster !== registries.taobao) {
58-
// default is already faster
59-
return save(false)
60-
}
61-
62-
// ask and save preference
63-
pauseSpinner()
64-
const { useTaobaoRegistry } = await inquirer.prompt([{
65-
name: 'useTaobaoRegistry',
66-
type: 'confirm',
67-
message: chalk.yellow(
68-
` Your connection to the the default npm registry seems to be slow.\n` +
69-
` Use ${chalk.cyan(registries.taobao)} for faster installation?`
70-
)
71-
}])
72-
resumeSpinner()
73-
return save(useTaobaoRegistry)
74-
}
75-
7611
function toStartOfLine (stream) {
7712
if (!chalk.supportsColor) {
7813
stream.write('\r')

Diff for: packages/@vue/cli/lib/util/registries.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const registries = {
2+
npm: 'https://registry.npmjs.org',
3+
yarn: 'https://registry.yarnpkg.com',
4+
taobao: 'https://registry.npm.taobao.org'
5+
}
6+
7+
module.exports = registries

Diff for: packages/@vue/cli/lib/util/shouldUseTaobao.js

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
const chalk = require('chalk')
2+
const execa = require('execa')
3+
const request = require('./request')
4+
const inquirer = require('inquirer')
5+
const registries = require('./registries')
6+
const { loadOptions, saveOptions } = require('../options')
7+
8+
async function ping (registry) {
9+
await request.get(`${registry}/vue-cli-version-marker/latest`)
10+
return registry
11+
}
12+
13+
function removeSlash (url) {
14+
return url.replace(/\/$/, '')
15+
}
16+
17+
let checked
18+
let result
19+
20+
module.exports = async function shouldUseTaobao () {
21+
// ensure this only gets called once.
22+
if (checked) return result
23+
checked = true
24+
25+
// previously saved preference
26+
const saved = loadOptions().useTaobaoRegistry
27+
if (typeof saved === 'boolean') {
28+
return (result = saved)
29+
}
30+
31+
const save = val => {
32+
result = val
33+
saveOptions({ useTaobaoRegistry: val })
34+
return val
35+
}
36+
37+
const userCurrent = (await execa(`npm`, ['config', 'get', 'registry'])).stdout
38+
const defaultRegistry = registries.npm
39+
if (removeSlash(userCurrent) !== removeSlash(defaultRegistry)) {
40+
// user has configured custom regsitry, respect that
41+
return save(false)
42+
}
43+
const faster = await Promise.race([
44+
ping(defaultRegistry),
45+
ping(registries.taobao)
46+
])
47+
48+
if (faster !== registries.taobao) {
49+
// default is already faster
50+
return save(false)
51+
}
52+
53+
// ask and save preference
54+
const { useTaobaoRegistry } = await inquirer.prompt([
55+
{
56+
name: 'useTaobaoRegistry',
57+
type: 'confirm',
58+
message: chalk.yellow(
59+
` Your connection to the the default npm registry seems to be slow.\n` +
60+
` Use ${chalk.cyan(registries.taobao)} for faster installation?`
61+
)
62+
}
63+
])
64+
return save(useTaobaoRegistry)
65+
}

0 commit comments

Comments
 (0)