diff --git a/packages/@vue/cli/bin/vue.js b/packages/@vue/cli/bin/vue.js index 3d5fc86e6c..a94f643425 100755 --- a/packages/@vue/cli/bin/vue.js +++ b/packages/@vue/cli/bin/vue.js @@ -5,10 +5,7 @@ const { chalk, semver } = require('@vue/cli-shared-utils') const requiredVersion = require('../package.json').engines.node -const didYouMean = require('didyoumean') - -// Setting edit distance to 60% of the input string's length -didYouMean.threshold = 0.6 +const leven = require('leven') function checkNodeVersion (wanted, id) { if (!semver.satisfies(process.version, wanted)) { @@ -261,7 +258,15 @@ if (!process.argv.slice(2).length) { function suggestCommands (unknownCommand) { const availableCommands = program.commands.map(cmd => cmd._name) - const suggestion = didYouMean(unknownCommand, availableCommands) + let suggestion + + availableCommands.forEach(cmd => { + const isBestMatch = leven(cmd, unknownCommand) < leven(suggestion || '', unknownCommand) + if (leven(cmd, unknownCommand) < 3 && isBestMatch) { + suggestion = cmd + } + }) + if (suggestion) { console.log(` ` + chalk.red(`Did you mean ${chalk.yellow(suggestion)}?`)) } diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index 1f46d6a0eb..fc2edaf8a7 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -33,7 +33,6 @@ "commander": "^2.20.0", "debug": "^4.1.0", "deepmerge": "^4.2.2", - "didyoumean": "^1.2.1", "download-git-repo": "^1.0.2", "ejs": "^2.7.1", "envinfo": "^7.5.0", @@ -45,6 +44,7 @@ "javascript-stringify": "^1.6.0", "js-yaml": "^3.13.1", "jscodeshift": "^0.7.0", + "leven": "^3.1.0", "lodash.clonedeep": "^4.5.0", "lru-cache": "^5.1.1", "minimist": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index 7b3dda15e2..0886cbe102 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2529,7 +2529,7 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== -"@types/mocha@^5.2.4", "@types/mocha@^5.2.6": +"@types/mocha@^5.2.6": version "5.2.7" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== @@ -2798,14 +2798,6 @@ resolved "https://registry.yarnpkg.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.1.tgz#18723530d304f443021da2292d6ec9502826104a" integrity sha512-8VCoJeeH8tCkzhkpfOkt+abALQkS11OIHhte5MBzYaKMTqK0A3ZAKEUVAffsOklhEv7t0yrQt696Opnu9oAx+w== -"@vue/test-utils@1.0.0-beta.29": - version "1.0.0-beta.29" - resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.29.tgz#c942cf25e891cf081b6a03332b4ae1ef430726f0" - integrity sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA== - dependencies: - dom-event-types "^1.0.0" - lodash "^4.17.4" - "@vue/test-utils@1.0.0-beta.31": version "1.0.0-beta.31" resolved "https://registry.yarnpkg.com/@vue/test-utils/-/test-utils-1.0.0-beta.31.tgz#580d6e45f07452e497d69807d80986e713949b73" @@ -5161,7 +5153,7 @@ chrome-trace-event@^1.0.2: dependencies: tslib "^1.9.0" -chromedriver@80, chromedriver@^80.0.0: +chromedriver@^80.0.0: version "80.0.0" resolved "https://registry.yarnpkg.com/chromedriver/-/chromedriver-80.0.0.tgz#f9e2af4c2117e7e07dc4558cf9496a70ad6c3ddc" integrity sha512-W4tIbaOve7HeGFLnbbZMV4AUlnBaapL+H41fvDFKOXCmUvgPhxVN9y/c3EgmsOcokLQkqxpOC/txEujms1eT0w== @@ -6778,11 +6770,6 @@ dicer@0.3.0: dependencies: streamsearch "0.1.2" -didyoumean@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.1.tgz#e92edfdada6537d484d73c0172fd1eba0c4976ff" - integrity sha1-6S7f2tplN9SE1zwBcv0eugxJdv8= - diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5"