@@ -2,11 +2,11 @@ const fs = require('fs-extra')
2
2
const chalk = require ( 'chalk' )
3
3
const debug = require ( 'debug' )
4
4
const execa = require ( 'execa' )
5
- const resolve = require ( 'resolve' )
6
5
const inquirer = require ( 'inquirer' )
7
6
const Generator = require ( './Generator' )
8
7
const cloneDeep = require ( 'lodash.clonedeep' )
9
8
const sortObject = require ( './util/sortObject' )
9
+ const { loadModule } = require ( './util/module' )
10
10
const getVersions = require ( './util/getVersions' )
11
11
const { installDeps } = require ( './util/installDeps' )
12
12
const clearConsole = require ( './util/clearConsole' )
@@ -133,7 +133,7 @@ module.exports = class Creator {
133
133
// run generator
134
134
log ( )
135
135
log ( `🚀 Invoking generators...` )
136
- const plugins = this . resolvePlugins ( preset . plugins )
136
+ const plugins = await this . resolvePlugins ( preset . plugins )
137
137
const generator = new Generator ( context , {
138
138
pkg,
139
139
plugins,
@@ -265,17 +265,26 @@ module.exports = class Creator {
265
265
}
266
266
267
267
// { id: options } => [{ id, apply, options }]
268
- resolvePlugins ( rawPlugins ) {
268
+ async resolvePlugins ( rawPlugins ) {
269
269
// ensure cli-service is invoked first
270
270
rawPlugins = sortObject ( rawPlugins , [ '@vue/cli-service' ] )
271
- return Object . keys ( rawPlugins ) . map ( id => {
272
- const module = resolve . sync ( `${ id } /generator` , { basedir : this . context } )
273
- return {
274
- id,
275
- apply : require ( module ) ,
276
- options : rawPlugins [ id ]
271
+ const plugins = [ ]
272
+ for ( const id of Object . keys ( rawPlugins ) ) {
273
+ const apply = loadModule ( `${ id } /generator` , this . context )
274
+ if ( ! apply ) {
275
+ throw new Error ( `Failed to resolve plugin: ${ id } ` )
277
276
}
278
- } )
277
+ let options = rawPlugins [ id ] || { }
278
+ if ( options . prompts ) {
279
+ const prompts = loadModule ( `${ id } /prompts` , this . context )
280
+ if ( prompts ) {
281
+ console . log ( `\n${ chalk . cyan ( id ) } ` )
282
+ options = await inquirer . prompt ( prompts )
283
+ }
284
+ }
285
+ plugins . push ( { id, apply, options } )
286
+ }
287
+ return plugins
279
288
}
280
289
281
290
resolveIntroPrompts ( ) {
0 commit comments