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,8 @@ class PackageManager {
174
176
}
175
177
}
176
178
177
- async getMetadata ( packageName , { field = '' } = { } ) {
179
+ // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md
180
+ async getMetadata ( packageName , { full = false } = { } ) {
178
181
const registry = await this . getRegistry ( )
179
182
180
183
const metadataKey = `${ this . bin } -${ registry } -${ packageName } `
@@ -184,17 +187,20 @@ class PackageManager {
184
187
return metadata
185
188
}
186
189
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
190
+ const headers = { }
191
+ if ( ! full ) {
192
+ headers . Accept = 'application/vnd.npm.install-v1+json'
194
193
}
195
194
196
- metadataCache . set ( metadataKey , metadata )
197
- return metadata
195
+ const url = `${ registry } /${ packageName } `
196
+ try {
197
+ metadata = ( await request . get ( url , { headers } ) ) . body
198
+ metadataCache . set ( metadataKey , metadata )
199
+ return metadata
200
+ } catch ( e ) {
201
+ error ( `Failed to get response from ${ url } ` )
202
+ throw e
203
+ }
198
204
}
199
205
200
206
async getRemoteVersion ( packageName , versionRange = 'latest' ) {
0 commit comments