From 130bcfb730a86ceb6cef8219c665c34c3ff7f207 Mon Sep 17 00:00:00 2001 From: James George Date: Thu, 13 Feb 2020 15:01:04 +0530 Subject: [PATCH 01/10] chore: switch over to leven for command suggestion (#5166) * chore: switch to leven * chore: update lock file * chore: iterate through all the available commands and find closest match * chore: update yarn.lock * fix: lint * chore: find the best possible match --- packages/@vue/cli/bin/vue.js | 15 ++++++++++----- packages/@vue/cli/package.json | 2 +- yarn.lock | 17 ++--------------- 3 files changed, 13 insertions(+), 21 deletions(-) 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" From 1423553a6d38212f9d9ed33f4bb375aa707e07bb Mon Sep 17 00:00:00 2001 From: James George Date: Sun, 16 Feb 2020 18:22:17 +0530 Subject: [PATCH 02/10] chore: Minor typographical fix (#5189) * chore: typographical fix * chore: update test --- packages/@vue/cli/lib/promptModules/__tests__/e2e.spec.js | 4 ++-- packages/@vue/cli/lib/promptModules/e2e.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/@vue/cli/lib/promptModules/__tests__/e2e.spec.js b/packages/@vue/cli/lib/promptModules/__tests__/e2e.spec.js index 40994e5a85..5b7ca9beeb 100644 --- a/packages/@vue/cli/lib/promptModules/__tests__/e2e.spec.js +++ b/packages/@vue/cli/lib/promptModules/__tests__/e2e.spec.js @@ -13,7 +13,7 @@ test('cypress', async () => { check: [0] }, { - message: 'Pick a E2E testing solution', + message: 'Pick an E2E testing solution', choices: ['Cypress', 'Nightwatch'], choose: 0 } @@ -41,7 +41,7 @@ test('nightwatch', async () => { check: [0] }, { - message: 'Pick a E2E testing solution', + message: 'Pick an E2E testing solution', choices: ['Cypress', 'Nightwatch'], choose: 1 }, diff --git a/packages/@vue/cli/lib/promptModules/e2e.js b/packages/@vue/cli/lib/promptModules/e2e.js index 09bc05bece..cf1df2ee5a 100644 --- a/packages/@vue/cli/lib/promptModules/e2e.js +++ b/packages/@vue/cli/lib/promptModules/e2e.js @@ -14,7 +14,7 @@ module.exports = cli => { name: 'e2e', when: answers => answers.features.includes('e2e'), type: 'list', - message: 'Pick a E2E testing solution:', + message: 'Pick an E2E testing solution:', choices: [ { name: 'Cypress (Chrome only)', From efbc20c67616e116b6d82dadbebd3e5eb768f00d Mon Sep 17 00:00:00 2001 From: Xiao Haiping Date: Mon, 17 Feb 2020 15:22:18 +0800 Subject: [PATCH 03/10] docs(zh): Update now 404 url (#5141) ref to en docs --- docs/zh/guide/deployment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/zh/guide/deployment.md b/docs/zh/guide/deployment.md index 730c08f2fa..04a62a5b9a 100644 --- a/docs/zh/guide/deployment.md +++ b/docs/zh/guide/deployment.md @@ -281,7 +281,7 @@ now 你的站点会开始部署,你将获得一个形如 [https://vue.now-examples.now.sh/](https://vue.now-examples.now.sh/) 的链接。 -开箱即用地,请求会被自动改写到 `index.html` (除了自定义的静态文件) 并带有合适的缓存请求头。你可以[改写](https://zeit.co/docs/v2/advanced/routes/)这些规则。 +开箱即用地,请求会被自动改写到 `index.html` (除了自定义的静态文件) 并带有合适的缓存请求头。 ### Stdlib From 480ac7f84fd073ae77bc3c808614345dde5c6efa Mon Sep 17 00:00:00 2001 From: James George Date: Tue, 25 Feb 2020 06:35:31 +0530 Subject: [PATCH 04/10] chore: minor typographical fix (#5215) --- packages/@vue/cli/__tests__/Creator.spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/@vue/cli/__tests__/Creator.spec.js b/packages/@vue/cli/__tests__/Creator.spec.js index b32bc7cc60..2437ecf10d 100644 --- a/packages/@vue/cli/__tests__/Creator.spec.js +++ b/packages/@vue/cli/__tests__/Creator.spec.js @@ -5,7 +5,7 @@ const { defaults } = require('../lib/options') const assertPromptModule = require('@vue/cli-test-utils/assertPromptModule') test('default', async () => { - const epxectedPrompts = [ + const expectedPrompts = [ { message: 'pick a preset', choices: [ @@ -20,7 +20,7 @@ test('default', async () => { choose: 0 } ] - await assertPromptModule([], epxectedPrompts, defaults.presets.default) + await assertPromptModule([], expectedPrompts, defaults.presets.default) }) test('manual + PromptModuleAPI', async () => { From 33487a858c0972a17fdcff46bc06f2d60aecdf3c Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 27 Feb 2020 10:26:02 +0800 Subject: [PATCH 05/10] workflow: allow manually specifying dist-tag when releasing --- scripts/release.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/release.js b/scripts/release.js index 80873b4376..64740bc727 100644 --- a/scripts/release.js +++ b/scripts/release.js @@ -95,7 +95,7 @@ const release = async () => { } } - let distTag = 'latest' + let distTag = cliOptions['dist-tag'] || 'latest' if (bump === 'prerelease' || semver.prerelease(version)) { distTag = 'next' } From 72256496150bd821fe54c91e9592ef3c84a285a4 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 27 Feb 2020 10:28:49 +0800 Subject: [PATCH 06/10] docs: vue-cli -> Vue CLI --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 450f20e08e..bb908e3b8a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# vue-cli [![Build Status](https://circleci.com/gh/vuejs/vue-cli/tree/dev.svg?style=shield)](https://circleci.com/gh/vuejs/vue-cli/tree/dev) [![Windows Build status](https://ci.appveyor.com/api/projects/status/rkpafdpdwie9lqx0/branch/dev?svg=true)](https://ci.appveyor.com/project/yyx990803/vue-cli/branch/dev) [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) +# Vue CLI [![Build Status](https://circleci.com/gh/vuejs/vue-cli/tree/dev.svg?style=shield)](https://circleci.com/gh/vuejs/vue-cli/tree/dev) [![Windows Build status](https://ci.appveyor.com/api/projects/status/rkpafdpdwie9lqx0/branch/dev?svg=true)](https://ci.appveyor.com/project/yyx990803/vue-cli/branch/dev) [![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/) > Vue CLI is the Standard Tooling for Vue.js Development. From 69f6805211f451147ac0d737d5b591bf2c02d8ac Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 27 Feb 2020 11:09:21 +0800 Subject: [PATCH 07/10] fix(cli-service-global): fix no-debugger rule config (#5196) closes #5194 --- packages/@vue/cli-service-global/lib/globalConfigPlugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-service-global/lib/globalConfigPlugin.js b/packages/@vue/cli-service-global/lib/globalConfigPlugin.js index ddda032955..a98bd7d075 100644 --- a/packages/@vue/cli-service-global/lib/globalConfigPlugin.js +++ b/packages/@vue/cli-service-global/lib/globalConfigPlugin.js @@ -115,7 +115,7 @@ module.exports = function createConfigPlugin (context, entry, asLib) { }, rules: { 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', - 'no-debugger': `process.env.NODE_ENV === 'production' ? 'error' : 'off'` + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off' } } })) From 5cb988cb273d9bc1bbdddd4b7c71ab1c4e3d6e57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Exbrayat?= Date: Thu, 27 Feb 2020 04:10:15 +0100 Subject: [PATCH 08/10] fix(GeneratorAPI): remove warning when using extendPackage with prune (#5202) Currently, if we use `api.extendPackage({foo: null}, {prune: true})` the dependency is removed but a warning is logged as the range is invalid: ``` WARN invalid version range for dependency "foo": - null injected by generator "my-plugin" ``` --- packages/@vue/cli/__tests__/Generator.spec.js | 3 +++ packages/@vue/cli/lib/util/mergeDeps.js | 1 + 2 files changed, 4 insertions(+) diff --git a/packages/@vue/cli/__tests__/Generator.spec.js b/packages/@vue/cli/__tests__/Generator.spec.js index 77a780cb95..5a97a794d1 100644 --- a/packages/@vue/cli/__tests__/Generator.spec.js +++ b/packages/@vue/cli/__tests__/Generator.spec.js @@ -457,6 +457,9 @@ test('api: extendPackage + { prune: true }', async () => { await generator.generate() + // should not warn about the null versions + expect(logs.warn.length).toBe(0) + const pkg = JSON.parse(fs.readFileSync('/package.json', 'utf-8')) expect(pkg).toEqual({ version: '0.0.0', diff --git a/packages/@vue/cli/lib/util/mergeDeps.js b/packages/@vue/cli/lib/util/mergeDeps.js index 410f02f487..d437532cbd 100644 --- a/packages/@vue/cli/lib/util/mergeDeps.js +++ b/packages/@vue/cli/lib/util/mergeDeps.js @@ -42,6 +42,7 @@ module.exports = function mergeDeps ( if (prune && injectingRange == null) { delete result[depName] + continue } if (!isValidRange(injectingRange)) { From d8db292080c202aea5e3adc140a3f01c867d6b77 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 27 Feb 2020 11:10:47 +0800 Subject: [PATCH 09/10] fix: fix "Vue packages version mismatch" error caused by other global packages (#5163) closes #5161 The root cause of such issues: `vue-jscodeshift-adapter` requires `vue-template-compiler`. `vue-template-compiler` tries to require the `vue` package and check its version on startup. Normally, there's no `vue` package in the dependency tree of `@vue/cli`, so this check will just skip. But if the user has installed some other global package that depend on `vue`, and hoists it to the root `node_modules`, `vue-template-compiler` would successfully require it and check against that `vue` version, which sometimes may be outdated, thus failing the bootstrap process. --- packages/@vue/cli/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/@vue/cli/package.json b/packages/@vue/cli/package.json index fc2edaf8a7..24e8957072 100644 --- a/packages/@vue/cli/package.json +++ b/packages/@vue/cli/package.json @@ -53,6 +53,7 @@ "shortid": "^2.2.15", "slash": "^3.0.0", "validate-npm-package-name": "^3.0.0", + "vue": "^2.6.11", "vue-jscodeshift-adapter": "^2.0.2", "yaml-front-matter": "^3.4.1" }, From da848401c3e60c2774bea23ca066c7496c7cd688 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Thu, 27 Feb 2020 18:09:58 +0800 Subject: [PATCH 10/10] docs: add page title & fix link [ci skip] --- .github/CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 5eb8134fb0..1d0029c531 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,3 +1,5 @@ +# Contributing to Vue CLI + ## Workflow The Git workflow used in this project is largely inspired by [Gitflow workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow). @@ -66,4 +68,4 @@ Note that `jest --onlyChanged` isn't always accurate because some tests spawn ch ### Plugin Development -See [dedicated section in docs](https://github.com/vuejs/vue-cli/blob/dev/docs/dev-guide/plugin-dev.md). +See [dedicated section in docs](https://cli.vuejs.org/dev-guide/plugin-dev.html).