From 2b1a60a16963ead6fe241bfd80ae27eac4dc4e03 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 15 May 2019 15:53:46 +0800 Subject: [PATCH 1/5] feat: add `version` / `assertVersion` for GeneratorAPI Note this is for checking the global `@vue/cli` version. --- docs/dev-guide/generator-api.md | 20 ++++++++++++++++++++ docs/dev-guide/plugin-api.md | 2 +- packages/@vue/cli/lib/GeneratorAPI.js | 23 +++++++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/docs/dev-guide/generator-api.md b/docs/dev-guide/generator-api.md index 889b44bba5..f389e1cb86 100644 --- a/docs/dev-guide/generator-api.md +++ b/docs/dev-guide/generator-api.md @@ -1,5 +1,25 @@ # Generator API +## version + +Type: `string` + +The version string for the **global** `@vue/cli` version that is invoking the plugin. + + +## assertVersion + +- **Arguments** + - `{integer | string} range` - a semver range that `@vue/cli` needs to satisfy + +- **Usage** + + While api.version can be useful in general, it's sometimes nice to just declare your version. + This API exposes a simple way to do that. + + Nothing happens if the provided version is satified. Otherwise, an error will be thrown. + + ## resolve - **Arguments** diff --git a/docs/dev-guide/plugin-api.md b/docs/dev-guide/plugin-api.md index ab7ecf4c54..2e23920233 100644 --- a/docs/dev-guide/plugin-api.md +++ b/docs/dev-guide/plugin-api.md @@ -7,7 +7,7 @@ Type: `string` The version string for the `@vue/cli-service` version that is loading the plugin. -## assertVersion(range) +## assertVersion - **Arguments** - `{integer | string} range` - a semver range that `@vue/cli-service` needs to satisfy diff --git a/packages/@vue/cli/lib/GeneratorAPI.js b/packages/@vue/cli/lib/GeneratorAPI.js index 35ca1a36bf..bf6c732c8d 100644 --- a/packages/@vue/cli/lib/GeneratorAPI.js +++ b/packages/@vue/cli/lib/GeneratorAPI.js @@ -4,6 +4,7 @@ const path = require('path') const merge = require('deepmerge') const resolve = require('resolve') const isBinary = require('isbinaryfile') +const semver = require('semver') const mergeDeps = require('./util/mergeDeps') const stringifyJS = require('./util/stringifyJS') const ConfigTransform = require('./ConfigTransform') @@ -71,6 +72,28 @@ class GeneratorAPI { return path.resolve(this.generator.context, _path) } + get version () { + return require('../package.json').version + } + + assertVersion (range) { + if (typeof range === 'number') { + if (!Number.isInteger(range)) { + throw new Error('Expected string or integer value.') + } + range = `^${range}.0.0-0` + } + if (typeof range !== 'string') { + throw new Error('Expected string or integer value.') + } + + if (semver.satisfies(this.version, range)) return + + throw new Error( + `Require @vue/cli "${range}", but was invoked by "${this.version}".` + ) + } + /** * Check if the project has a given plugin. * From 2c7062a37e39faf1f2617d9014c062f267ee082a Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 15 May 2019 16:38:51 +0800 Subject: [PATCH 2/5] feat: add `serviceVersion` / `assertServiceVersion` for GeneratorAPI --- packages/@vue/cli/lib/GeneratorAPI.js | 31 +++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/@vue/cli/lib/GeneratorAPI.js b/packages/@vue/cli/lib/GeneratorAPI.js index bf6c732c8d..412fbe60ab 100644 --- a/packages/@vue/cli/lib/GeneratorAPI.js +++ b/packages/@vue/cli/lib/GeneratorAPI.js @@ -8,7 +8,7 @@ const semver = require('semver') const mergeDeps = require('./util/mergeDeps') const stringifyJS = require('./util/stringifyJS') const ConfigTransform = require('./ConfigTransform') -const { getPluginLink, toShortPluginId } = require('@vue/cli-shared-utils') +const { getPluginLink, toShortPluginId, loadModule } = require('@vue/cli-shared-utils') const isString = val => typeof val === 'string' const isFunction = val => typeof val === 'function' @@ -90,7 +90,34 @@ class GeneratorAPI { if (semver.satisfies(this.version, range)) return throw new Error( - `Require @vue/cli "${range}", but was invoked by "${this.version}".` + `Require global @vue/cli "${range}", but was invoked by "${this.version}".` + ) + } + + get serviceVersion () { + const servicePkg = loadModule( + '@vue/cli-service/package.json', + this.generator.context + ) + + return servicePkg.version + } + + assertServiceVersion (range) { + if (typeof range === 'number') { + if (!Number.isInteger(range)) { + throw new Error('Expected string or integer value.') + } + range = `^${range}.0.0-0` + } + if (typeof range !== 'string') { + throw new Error('Expected string or integer value.') + } + + if (semver.satisfies(this.serviceVersion, range)) return + + throw new Error( + `Require @vue/cli-service "${range}", but was loaded with "${this.serviceVersion}".` ) } From a9b07740f802bd00609b04f6b383fda111ae48c8 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 15 May 2019 16:42:00 +0800 Subject: [PATCH 3/5] docs: add documentation for `serviceVersion` / `assertServiceVersion` --- docs/dev-guide/generator-api.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/docs/dev-guide/generator-api.md b/docs/dev-guide/generator-api.md index f389e1cb86..579618bf72 100644 --- a/docs/dev-guide/generator-api.md +++ b/docs/dev-guide/generator-api.md @@ -20,6 +20,25 @@ The version string for the **global** `@vue/cli` version that is invoking the pl Nothing happens if the provided version is satified. Otherwise, an error will be thrown. +## serviceVersion + +Type: `string` + +The version string for the **project local** `@vue/cli-service` version that is invoking the plugin. + + +## assertServiceVersion + +- **Arguments** + - `{integer | string} range` - a semver range that `@vue/cli-service` needs to satisfy + +- **Usage** + + This API exposes a simple way to declare the required project local `@vue/cli-service` version. + + Nothing happens if the provided version is satified. Otherwise, an error will be thrown. + + ## resolve - **Arguments** From a138ccc4d0bb924c861c8976f89bf74b309785c4 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 26 Jun 2019 00:05:26 +0800 Subject: [PATCH 4/5] chore: rename version -> cliVersion, serviceVersion -> cliServiceVersion --- packages/@vue/cli/lib/GeneratorAPI.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/@vue/cli/lib/GeneratorAPI.js b/packages/@vue/cli/lib/GeneratorAPI.js index 58b3c01c2f..9aec3478e6 100644 --- a/packages/@vue/cli/lib/GeneratorAPI.js +++ b/packages/@vue/cli/lib/GeneratorAPI.js @@ -72,11 +72,11 @@ class GeneratorAPI { return path.resolve(this.generator.context, _path) } - get version () { + get cliVersion () { return require('../package.json').version } - assertVersion (range) { + assertCliVersion (range) { if (typeof range === 'number') { if (!Number.isInteger(range)) { throw new Error('Expected string or integer value.') @@ -87,14 +87,14 @@ class GeneratorAPI { throw new Error('Expected string or integer value.') } - if (semver.satisfies(this.version, range)) return + if (semver.satisfies(this.cliVersion, range)) return throw new Error( - `Require global @vue/cli "${range}", but was invoked by "${this.version}".` + `Require global @vue/cli "${range}", but was invoked by "${this.cliVersion}".` ) } - get serviceVersion () { + get cliServiceVersion () { const servicePkg = loadModule( '@vue/cli-service/package.json', this.generator.context @@ -103,7 +103,7 @@ class GeneratorAPI { return servicePkg.version } - assertServiceVersion (range) { + assertCliServiceVersion (range) { if (typeof range === 'number') { if (!Number.isInteger(range)) { throw new Error('Expected string or integer value.') @@ -114,10 +114,10 @@ class GeneratorAPI { throw new Error('Expected string or integer value.') } - if (semver.satisfies(this.serviceVersion, range)) return + if (semver.satisfies(this.cliServiceVersion, range)) return throw new Error( - `Require @vue/cli-service "${range}", but was loaded with "${this.serviceVersion}".` + `Require @vue/cli-service "${range}", but was loaded with "${this.cliServiceVersion}".` ) } From 40e3db6f6959b171167ff5126f690c7a7f0cad14 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Wed, 26 Jun 2019 00:15:03 +0800 Subject: [PATCH 5/5] chore: update docs --- docs/dev-guide/generator-api.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/dev-guide/generator-api.md b/docs/dev-guide/generator-api.md index 579618bf72..286128ee9d 100644 --- a/docs/dev-guide/generator-api.md +++ b/docs/dev-guide/generator-api.md @@ -1,13 +1,13 @@ # Generator API -## version +## cliVersion Type: `string` The version string for the **global** `@vue/cli` version that is invoking the plugin. -## assertVersion +## assertCliVersion - **Arguments** - `{integer | string} range` - a semver range that `@vue/cli` needs to satisfy @@ -20,14 +20,14 @@ The version string for the **global** `@vue/cli` version that is invoking the pl Nothing happens if the provided version is satified. Otherwise, an error will be thrown. -## serviceVersion +## cliServiceVersion Type: `string` The version string for the **project local** `@vue/cli-service` version that is invoking the plugin. -## assertServiceVersion +## assertCliServiceVersion - **Arguments** - `{integer | string} range` - a semver range that `@vue/cli-service` needs to satisfy