Skip to content

Commit 11956ac

Browse files
javoskiyyx990803
authored andcommitted
feat: allow vue add to work with plugins without a generator (#1032)
1 parent 2106f47 commit 11956ac

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ const chalk = require('chalk')
22
const invoke = require('./invoke')
33
const { loadOptions } = require('./options')
44
const { installPackage } = require('./util/installDeps')
5+
const { resolveModule } = require('./util/module')
56
const {
67
log,
78
error,
@@ -26,7 +27,12 @@ async function add (pluginName, options = {}, context = process.cwd()) {
2627
log(`${chalk.green('✔')} Successfully installed plugin: ${chalk.cyan(packageName)}`)
2728
log()
2829

29-
invoke(pluginName, options, context)
30+
const generatorPath = resolveModule(`${packageName}/generator`, context)
31+
if (generatorPath) {
32+
invoke(pluginName, options, context)
33+
} else {
34+
log(`Plugin ${packageName} does not have a generator to invoke`)
35+
}
3036
}
3137

3238
module.exports = (...args) => {

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ const path = require('path')
33
const execa = require('execa')
44
const chalk = require('chalk')
55
const globby = require('globby')
6-
const resolve = require('resolve')
76
const inquirer = require('inquirer')
87
const Generator = require('./Generator')
98
const { loadOptions } = require('./options')
109
const { installDeps } = require('./util/installDeps')
10+
const { loadModule } = require('./util/module')
1111
const {
1212
log,
1313
error,
@@ -18,16 +18,6 @@ const {
1818
resolvePluginId
1919
} = require('@vue/cli-shared-utils')
2020

21-
function load (request, context) {
22-
let resolvedPath
23-
try {
24-
resolvedPath = resolve.sync(request, { basedir: context })
25-
} catch (e) {}
26-
if (resolvedPath) {
27-
return require(resolvedPath)
28-
}
29-
}
30-
3121
async function readFiles (context) {
3222
const files = await globby(['**'], {
3323
cwd: context,
@@ -75,15 +65,15 @@ async function invoke (pluginName, options = {}, context = process.cwd()) {
7565
)
7666
}
7767

78-
const pluginGenerator = load(`${id}/generator`, context)
68+
const pluginGenerator = loadModule(`${id}/generator`, context)
7969
if (!pluginGenerator) {
8070
throw new Error(`Plugin ${id} does not have a generator.`)
8171
}
8272

8373
// resolve options if no command line options are passed, and the plugin
8474
// contains a prompt module.
8575
if (!Object.keys(options).length) {
86-
const pluginPrompts = load(`${id}/prompts`, context)
76+
const pluginPrompts = loadModule(`${id}/prompts`, context)
8777
if (pluginPrompts) {
8878
options = await inquirer.prompt(pluginPrompts)
8979
}

packages/@vue/cli/lib/util/module.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const resolve = require('resolve')
2+
3+
exports.resolveModule = function resolveModule (request, context) {
4+
let resolvedPath
5+
try {
6+
resolvedPath = resolve.sync(request, { basedir: context })
7+
} catch (e) {}
8+
return resolvedPath
9+
}
10+
11+
exports.loadModule = function loadModule (request, context) {
12+
const resolvedPath = exports.resolveModule(request, context)
13+
if (resolvedPath) {
14+
return require(resolvedPath)
15+
}
16+
}

0 commit comments

Comments
 (0)