Skip to content

Commit 3dd38da

Browse files
committed
feat: support { prompts: true } for preset plugins
close #952
1 parent 6d807e0 commit 3dd38da

File tree

1 file changed

+19
-10
lines changed

1 file changed

+19
-10
lines changed

packages/@vue/cli/lib/Creator.js

+19-10
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ const fs = require('fs-extra')
22
const chalk = require('chalk')
33
const debug = require('debug')
44
const execa = require('execa')
5-
const resolve = require('resolve')
65
const inquirer = require('inquirer')
76
const Generator = require('./Generator')
87
const cloneDeep = require('lodash.clonedeep')
98
const sortObject = require('./util/sortObject')
9+
const { loadModule } = require('./util/module')
1010
const getVersions = require('./util/getVersions')
1111
const { installDeps } = require('./util/installDeps')
1212
const clearConsole = require('./util/clearConsole')
@@ -133,7 +133,7 @@ module.exports = class Creator {
133133
// run generator
134134
log()
135135
log(`🚀 Invoking generators...`)
136-
const plugins = this.resolvePlugins(preset.plugins)
136+
const plugins = await this.resolvePlugins(preset.plugins)
137137
const generator = new Generator(context, {
138138
pkg,
139139
plugins,
@@ -265,17 +265,26 @@ module.exports = class Creator {
265265
}
266266

267267
// { id: options } => [{ id, apply, options }]
268-
resolvePlugins (rawPlugins) {
268+
async resolvePlugins (rawPlugins) {
269269
// ensure cli-service is invoked first
270270
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}`)
277276
}
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
279288
}
280289

281290
resolveIntroPrompts () {

0 commit comments

Comments
 (0)