@@ -13,6 +13,7 @@ const PromptModuleAPI = require('./PromptModuleAPI')
1313const writeFileTree = require ( './util/writeFileTree' )
1414const formatFeatures = require ( './util/formatFeatures' )
1515const setupDevProject = require ( './util/setupDevProject' )
16+ const fetchRemotePreset = require ( './util/fetchRemotePreset' )
1617
1718const {
1819 defaults,
@@ -60,7 +61,7 @@ module.exports = class Creator {
6061 let preset
6162 if ( cliOptions . preset ) {
6263 // vue create foo --preset bar
63- preset = this . resolvePreset ( cliOptions . preset )
64+ preset = await this . resolvePreset ( cliOptions . preset , cliOptions . clone )
6465 } else if ( cliOptions . default ) {
6566 // vue create foo --default
6667 preset = defaults . presets . default
@@ -194,7 +195,7 @@ module.exports = class Creator {
194195
195196 let preset
196197 if ( answers . preset && answers . preset !== '__manual__' ) {
197- preset = this . resolvePreset ( answers . preset )
198+ preset = await this . resolvePreset ( answers . preset )
198199 } else {
199200 // manual
200201 preset = {
@@ -218,9 +219,24 @@ module.exports = class Creator {
218219 return preset
219220 }
220221
221- resolvePreset ( name ) {
222+ async resolvePreset ( name , clone ) {
223+ let preset
222224 const savedPresets = loadOptions ( ) . presets || { }
223- let preset = savedPresets [ name ]
225+
226+ if ( name . includes ( '/' ) ) {
227+ logWithSpinner ( `Fetching remote preset ${ chalk . cyan ( name ) } ...` )
228+ try {
229+ preset = await fetchRemotePreset ( name , clone )
230+ stopSpinner ( )
231+ } catch ( e ) {
232+ stopSpinner ( )
233+ error ( `Failed fetching remote preset ${ chalk . cyan ( name ) } :` )
234+ throw e
235+ }
236+ } else {
237+ preset = savedPresets [ name ]
238+ }
239+
224240 // use default preset if user has not overwritten it
225241 if ( name === 'default' && ! preset ) {
226242 preset = defaults . presets . default
0 commit comments