|
1 |
| -const request = require('./request') |
2 | 1 | const chalk = require('chalk')
|
3 | 2 | const execa = require('execa')
|
4 | 3 | 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') |
8 | 6 |
|
9 | 7 | const debug = require('debug')('vue-cli:install')
|
10 | 8 |
|
11 |
| -const registries = { |
12 |
| - npm: 'https://registry.npmjs.org', |
13 |
| - yarn: 'https://registry.yarnpkg.com', |
14 |
| - taobao: 'https://registry.npm.taobao.org' |
15 |
| -} |
16 | 9 | const taobaoDistURL = 'https://npm.taobao.org/dist'
|
17 | 10 |
|
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 |
| - |
76 | 11 | function toStartOfLine (stream) {
|
77 | 12 | if (!chalk.supportsColor) {
|
78 | 13 | stream.write('\r')
|
|
0 commit comments