@@ -4,10 +4,11 @@ const path = require('path')
4
4
const merge = require ( 'deepmerge' )
5
5
const resolve = require ( 'resolve' )
6
6
const { isBinaryFileSync } = require ( 'isbinaryfile' )
7
+ const semver = require ( 'semver' )
7
8
const mergeDeps = require ( './util/mergeDeps' )
8
9
const stringifyJS = require ( './util/stringifyJS' )
9
10
const ConfigTransform = require ( './ConfigTransform' )
10
- const { getPluginLink, toShortPluginId } = require ( '@vue/cli-shared-utils' )
11
+ const { getPluginLink, toShortPluginId, loadModule } = require ( '@vue/cli-shared-utils' )
11
12
12
13
const isString = val => typeof val === 'string'
13
14
const isFunction = val => typeof val === 'function'
@@ -71,6 +72,55 @@ class GeneratorAPI {
71
72
return path . resolve ( this . generator . context , _path )
72
73
}
73
74
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
+
74
124
/**
75
125
* Check if the project has a given plugin.
76
126
*
0 commit comments