Skip to content

Commit 97cc57f

Browse files
committed
refactor: use a plain http request to get package metadata
fixes vuejs#4895 fixes vuejs#4995
1 parent 3b7227d commit 97cc57f

File tree

2 files changed

+19
-13
lines changed

2 files changed

+19
-13
lines changed

packages/@vue/cli-shared-utils/lib/request.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
exports.request = {
2-
get (uri) {
2+
get (uri, opts) {
33
// lazy require
44
const request = require('request-promise-native')
55
const reqOpts = {
66
method: 'GET',
77
timeout: 30000,
88
resolveWithFullResponse: true,
99
json: true,
10-
uri
10+
uri,
11+
...opts
1112
}
1213

1314
return request(reqOpts)

packages/@vue/cli/lib/util/ProjectPackageManager.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const {
88
chalk,
99
execa,
1010
semver,
11+
request,
1112

1213
hasYarn,
1314
hasProjectYarn,
@@ -19,7 +20,8 @@ const {
1920
resolvePluginId,
2021

2122
log,
22-
warn
23+
warn,
24+
error
2325
} = require('@vue/cli-shared-utils')
2426

2527
const { loadOptions } = require('../options')
@@ -174,7 +176,7 @@ class PackageManager {
174176
}
175177
}
176178

177-
async getMetadata (packageName, { field = '' } = {}) {
179+
async getMetadata (packageName, { full = false } = {}) {
178180
const registry = await this.getRegistry()
179181

180182
const metadataKey = `${this.bin}-${registry}-${packageName}`
@@ -184,17 +186,20 @@ class PackageManager {
184186
return metadata
185187
}
186188

187-
const args = await this.addRegistryToArgs(['info', packageName, field, '--json'])
188-
const { stdout } = await execa(this.bin, args)
189-
190-
metadata = JSON.parse(stdout)
191-
if (this.bin === 'yarn') {
192-
// `yarn info` outputs messages in the form of `{"type": "inspect", data: {}}`
193-
metadata = metadata.data
189+
const headers = {}
190+
if (!full) {
191+
headers.Accept = 'application/vnd.npm.install-v1+json'
194192
}
195193

196-
metadataCache.set(metadataKey, metadata)
197-
return metadata
194+
const url = `${registry}/${packageName}`
195+
try {
196+
metadata = (await request.get(url, { headers })).body
197+
metadataCache.set(metadataKey, metadata)
198+
return metadata
199+
} catch (e) {
200+
error(`Failed to get response from ${url}`)
201+
throw e
202+
}
198203
}
199204

200205
async getRemoteVersion (packageName, versionRange = 'latest') {

0 commit comments

Comments
 (0)