11const chalk = require ( 'chalk' )
22const semver = require ( 'semver' )
33const invoke = require ( './invoke' )
4+ const inquirer = require ( 'inquirer' )
5+ const { loadModule } = require ( '@vue/cli-shared-utils' )
46
57const PackageManager = require ( './util/ProjectPackageManager' )
68const {
@@ -16,6 +18,18 @@ async function add (pluginName, options = {}, context = process.cwd()) {
1618 return
1719 }
1820
21+ // for `vue add` command in 3.x projects
22+ const servicePkg = loadModule ( '@vue/cli-service/package.json' , context )
23+ if ( semver . satisfies ( servicePkg . version , '3.x' ) ) {
24+ // special internal "plugins"
25+ if ( / ^ ( @ v u e \/ ) ? r o u t e r $ / . test ( pluginName ) ) {
26+ return addRouter ( context )
27+ }
28+ if ( / ^ ( @ v u e \/ ) ? v u e x $ / . test ( pluginName ) ) {
29+ return addVuex ( context )
30+ }
31+ }
32+
1933 const packageName = resolvePluginId ( pluginName )
2034
2135 log ( )
@@ -45,3 +59,23 @@ module.exports = (...args) => {
4559 }
4660 } )
4761}
62+
63+ async function addRouter ( context ) {
64+ const options = await inquirer . prompt ( [ {
65+ name : 'routerHistoryMode' ,
66+ type : 'confirm' ,
67+ message : `Use history mode for router? ${ chalk . yellow ( `(Requires proper server setup for index fallback in production)` ) } `
68+ } ] )
69+ invoke . runGenerator ( context , {
70+ id : 'core:router' ,
71+ apply : loadModule ( '@vue/cli-service/generator/router' , context ) ,
72+ options
73+ } )
74+ }
75+
76+ async function addVuex ( context ) {
77+ invoke . runGenerator ( context , {
78+ id : 'core:vuex' ,
79+ apply : loadModule ( '@vue/cli-service/generator/vuex' , context )
80+ } )
81+ }
0 commit comments