@@ -4,10 +4,11 @@ const path = require('path')
44const merge = require ( 'deepmerge' )
55const resolve = require ( 'resolve' )
66const { isBinaryFileSync } = require ( 'isbinaryfile' )
7+ const semver = require ( 'semver' )
78const mergeDeps = require ( './util/mergeDeps' )
89const stringifyJS = require ( './util/stringifyJS' )
910const ConfigTransform = require ( './ConfigTransform' )
10- const { getPluginLink, toShortPluginId } = require ( '@vue/cli-shared-utils' )
11+ const { getPluginLink, toShortPluginId, loadModule } = require ( '@vue/cli-shared-utils' )
1112
1213const isString = val => typeof val === 'string'
1314const isFunction = val => typeof val === 'function'
@@ -71,6 +72,55 @@ class GeneratorAPI {
7172 return path . resolve ( this . generator . context , _path )
7273 }
7374
75+ get cliVersion ( ) {
76+ return require ( '../package.json' ) . version
77+ }
78+
79+ assertCliVersion ( range ) {
80+ if ( typeof range === 'number' ) {
81+ if ( ! Number . isInteger ( range ) ) {
82+ throw new Error ( 'Expected string or integer value.' )
83+ }
84+ range = `^${ range } .0.0-0`
85+ }
86+ if ( typeof range !== 'string' ) {
87+ throw new Error ( 'Expected string or integer value.' )
88+ }
89+
90+ if ( semver . satisfies ( this . cliVersion , range ) ) return
91+
92+ throw new Error (
93+ `Require global @vue/cli "${ range } ", but was invoked by "${ this . cliVersion } ".`
94+ )
95+ }
96+
97+ get cliServiceVersion ( ) {
98+ const servicePkg = loadModule (
99+ '@vue/cli-service/package.json' ,
100+ this . generator . context
101+ )
102+
103+ return servicePkg . version
104+ }
105+
106+ assertCliServiceVersion ( range ) {
107+ if ( typeof range === 'number' ) {
108+ if ( ! Number . isInteger ( range ) ) {
109+ throw new Error ( 'Expected string or integer value.' )
110+ }
111+ range = `^${ range } .0.0-0`
112+ }
113+ if ( typeof range !== 'string' ) {
114+ throw new Error ( 'Expected string or integer value.' )
115+ }
116+
117+ if ( semver . satisfies ( this . cliServiceVersion , range ) ) return
118+
119+ throw new Error (
120+ `Require @vue/cli-service "${ range } ", but was loaded with "${ this . cliServiceVersion } ".`
121+ )
122+ }
123+
74124 /**
75125 * Check if the project has a given plugin.
76126 *
0 commit comments