8
8
chalk,
9
9
execa,
10
10
semver,
11
+ request,
11
12
12
13
hasYarn,
13
14
hasProjectYarn,
@@ -19,7 +20,8 @@ const {
19
20
resolvePluginId,
20
21
21
22
log,
22
- warn
23
+ warn,
24
+ error
23
25
} = require ( '@vue/cli-shared-utils' )
24
26
25
27
const { loadOptions } = require ( '../options' )
@@ -174,7 +176,7 @@ class PackageManager {
174
176
}
175
177
}
176
178
177
- async getMetadata ( packageName , { field = '' } = { } ) {
179
+ async getMetadata ( packageName , { full = false } = { } ) {
178
180
const registry = await this . getRegistry ( )
179
181
180
182
const metadataKey = `${ this . bin } -${ registry } -${ packageName } `
@@ -184,17 +186,20 @@ class PackageManager {
184
186
return metadata
185
187
}
186
188
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'
194
192
}
195
193
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
+ }
198
203
}
199
204
200
205
async getRemoteVersion ( packageName , versionRange = 'latest' ) {
0 commit comments