diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 601834beb7..c5369ee448 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,8 +1,8 @@
-IMPORTANT: Please use the following link to create a new issue:
+IMPORTANT: Please use our Issue Helper to create a new issue:
https://new-issue.vuejs.org/?repo=vuejs/vue-cli
-If your issue was not created using the app above, it will be closed immediately.
+If your issue was not created using Issue Helper from the link above, it will be closed immediately.
中文用户请注意:
请使用上面的链接来创建新的 issue。如果不是用上述工具创建的 issue 会被自动关闭。
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84f13d9177..501f99b031 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,7 +1,199 @@
+## 3.9.3 (2019年07月18日)
+
+#### :bug: Bug Fix
+* `@vue/cli-service`
+ * [#4057](https://github.com/vuejs/vue-cli/pull/4057) fix: indexPath should also affect non-production builds (#2327) ([@shadow-light](https://github.com/shadow-light))
+* `@vue/cli-test-utils`
+ * [#4224](https://github.com/vuejs/vue-cli/pull/4224) fix(cli-test-utils): use `--no-git` when `initGit` option is `false` ([@fangbinwei](https://github.com/fangbinwei))
+
+
+#### Committers: 3
+- Binwei Fang ([@fangbinwei](https://github.com/fangbinwei))
+- Eric Mastro ([@emizzle](https://github.com/emizzle))
+- [@shadow-light](https://github.com/shadow-light)
+
+
+
+## 3.9.2 (2019年07月06日)
+
+#### :bug: Bug Fix
+* `@vue/cli-plugin-eslint`
+ * [#4246](https://github.com/vuejs/vue-cli/pull/4246) fix: fix eslint path resolution in `vue serve` ([@sodatea](https://github.com/sodatea))
+
+#### :memo: Documentation
+* `@vue/babel-preset-app`, `@vue/cli-plugin-e2e-nightwatch`, `@vue/cli-plugin-eslint`, `@vue/cli-service`, `@vue/cli-ui`
+ * [#4241](https://github.com/vuejs/vue-cli/pull/4241) Fix typos ([@minho42](https://github.com/minho42))
+
+#### Committers: 2
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+- Min ho Kim ([@minho42](https://github.com/minho42))
+
+
+
+## 3.9.1 (2019年07月04日)
+
+#### :bug: Bug Fix
+* `@vue/cli-plugin-eslint`
+ * [#4233](https://github.com/vuejs/vue-cli/pull/4233) fix: use module directory instead of main entry path for `eslintPath` ([@sodatea](https://github.com/sodatea))
+
+#### Committers: 1
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+
+
+
+## 3.9.0 (2019年07月03日)
+
+#### :rocket: New Features
+* `@vue/cli`
+ * [#4188](https://github.com/vuejs/vue-cli/pull/4188) feat: add `transformScript` to GeneratorAPI ([@sodatea](https://github.com/sodatea))
+ * [#4000](https://github.com/vuejs/vue-cli/pull/4000) feat: implement version-related APIs for `GeneratorAPI` ([@sodatea](https://github.com/sodatea))
+ * [#4168](https://github.com/vuejs/vue-cli/pull/4168) feat: make `injectImports` & `injectRootOptions` work for `.vue` files ([@sodatea](https://github.com/sodatea))
+
+#### :bug: Bug Fix
+* `@vue/cli-service`
+ * [#4169](https://github.com/vuejs/vue-cli/pull/4169) fix: prefer `devServer.public` as the custom url for browser to open (#4169) ([@Devil-Cong](https://github.com/Devil-Cong))
+
+#### :memo: Documentation
+* `@vue/cli-plugin-typescript`
+ * [#4212](https://github.com/vuejs/vue-cli/pull/4212) feat(typescript): add an option to not rename all .js files to .ts and to set `allowJs` to true ([@NataliaTepluhina](https://github.com/NataliaTepluhina))
+* Other
+ * [#4217](https://github.com/vuejs/vue-cli/pull/4217) docs: add Render deployment guide ([@anurag](https://github.com/anurag))
+ * [#3777](https://github.com/vuejs/vue-cli/pull/3777) Add heroku deployment guide ([@zigomir](https://github.com/zigomir))
+ * [#3857](https://github.com/vuejs/vue-cli/pull/3857) docs: mention caveat about missing plugins when in legacy config ([@LinusBorg](https://github.com/LinusBorg))
+ * [#3171](https://github.com/vuejs/vue-cli/pull/3171) docs: Update issue template naming Issue Helper ([@peterblazejewicz](https://github.com/peterblazejewicz))
+ * [#4165](https://github.com/vuejs/vue-cli/pull/4165) docs: Add Chinese translation for the part -- Installing plugin locally ([@MoruoFrog](https://github.com/MoruoFrog))
+
+#### :house: Internal
+* `@vue/cli`
+ * [#4205](https://github.com/vuejs/vue-cli/pull/4205) Minor refactor to eliminate redundant code ([@jamesgeorge007](https://github.com/jamesgeorge007))
+* `@vue/cli-plugin-eslint`, `@vue/cli-plugin-typescript`, `@vue/cli-service`
+ * [#4153](https://github.com/vuejs/vue-cli/pull/4153) chore: move yorkie from cli-service to plugin-eslint & plugin-typescript ([@sodatea](https://github.com/sodatea))
+
+#### Committers: 10
+- Anurag Goel ([@anurag](https://github.com/anurag))
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+- James George ([@jamesgeorge007](https://github.com/jamesgeorge007))
+- Leon Liu ([@Devil-Cong](https://github.com/Devil-Cong))
+- Natalia Tepluhina ([@NataliaTepluhina](https://github.com/NataliaTepluhina))
+- Piotr Błażejewicz (Peter Blazejewicz) ([@peterblazejewicz](https://github.com/peterblazejewicz))
+- Thorsten Lünborg ([@LinusBorg](https://github.com/LinusBorg))
+- [@MoruoFrog](https://github.com/MoruoFrog)
+- [@aruseni](https://github.com/aruseni)
+- ziga ([@zigomir](https://github.com/zigomir))
+
+
+
+## 3.8.4 (2019年06月15日)
+
+#### :bug: Bug Fix
+* `@vue/cli`
+ * [#4148](https://github.com/vuejs/vue-cli/pull/4148) fix: fix config merging during `vue invoke` in Node.js v12 ([@sodatea](https://github.com/sodatea))
+* `@vue/cli-service`
+ * [#4150](https://github.com/vuejs/vue-cli/pull/4150) chore: upgrade default-gateway to 5.0.2 ([@zrh122](https://github.com/zrh122))
+
+#### Committers: 2
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+- [@zrh122](https://github.com/zrh122)
+
+
+
+## 3.8.3 (2019年06月13日)
+
+#### :bug: Bug Fix
+* `@vue/cli-service`
+ * [#4079](https://github.com/vuejs/vue-cli/pull/4079) fix: avoid opening browser twice ([@xovel](https://github.com/xovel))
+ * [#4083](https://github.com/vuejs/vue-cli/pull/4083) fix: display correct address when multiple network adapters present ([@sodatea](https://github.com/sodatea))
+ * [#4095](https://github.com/vuejs/vue-cli/pull/4095) fix: fix resolve project local plugin's file path ([@sodatea](https://github.com/sodatea))
+* `@vue/cli-ui`
+ * [1ff22d2](https://github.com/vuejs/vue-cli/commit/1ff22d2a51bfd62f851a8baae2027ae5e18488ea) fix: keep double quotes in script command ([@Akryum](https://github.com/Akryum))
+
+
+#### :memo: Documentation
+* [#3924](https://github.com/vuejs/vue-cli/pull/3924) docs: add more explanation at prompts ([@kazupon](https://github.com/kazupon))
+
+#### Committers: 2
+- Guillaume Chau ([@Akryum](https://github.com/Akryum))
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+- kazuya kawaguchi ([@kazupon](https://github.com/kazupon))
+- Sanapoint 顼轩 ([@xovel](https://github.com/xovel))
+
+## 3.8.2 (2019年05月26日)
+
+#### :bug: Bug Fix
+* `@vue/cli`
+ * [3c5bd30](https://github.com/vuejs/vue-cli/commit/3c5bd30827ead4a34ead19f49d2d33683fc6ad44) fixes update checking ([@sodatea](https://github.com/sodatea))
+
+#### Committers: 1
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+
+
+## 3.8.1 (2019年05月26日)
+
+#### :bug: Bug Fix
+* `@vue/cli-plugin-typescript`
+ * [19d50b9](https://github.com/vuejs/vue-cli/commit/19d50b9ea500e6779e2e27369b2efb328488be75) revert [the accidentally introduced breaking change](https://github.com/vuejs/vue-cli/pull/3909) ([@sodatea](https://github.com/sodatea))
+
+#### Committers: 1
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+
+
+## 3.8.0 (2019年05月25日)
+
+#### :rocket: New Features
+* `@vue/cli-plugin-pwa`, `@vue/cli-ui`
+ * [#3939](https://github.com/vuejs/vue-cli/pull/3939) add 'manifestCrossorigin' option ([@BigsonLvrocha](https://github.com/BigsonLvrocha))
+* `@vue/cli-ui`
+ * [#3929](https://github.com/vuejs/vue-cli/pull/3929) add support for inquirer type `editor` ([@Akryum](https://github.com/Akryum))
+ * [#3955](https://github.com/vuejs/vue-cli/pull/3955) allow rename (nickname) a project ([@Akryum](https://github.com/Akryum))
+* `@vue/cli-service`
+ * [#4011](https://github.com/vuejs/vue-cli/pull/4011) enable HMR when extracting CSS in dev ([@achretien](https://github.com/achretien))
+* `@vue/cli`
+ * [#3860](https://github.com/vuejs/vue-cli/pull/3860) suggest matching commands if the user mistypes ([@jamesgeorge007](https://github.com/jamesgeorge007))
+
+#### :boom: Breaking Changes
+(削除) * `@vue/cli-plugin-typescript` (削除ここまで)
+ * (削除) [#3909](https://github.com/vuejs/vue-cli/pull/3909) prefer .tsx? files over .jsx? file extensions ([@LinusBorg](https://github.com/LinusBorg)) (削除ここまで) (Reverted in v3.8.1)
+
+
+#### :bug: Bug Fix
+* `@vue/cli-service`
+ * [#4034](https://github.com/vuejs/vue-cli/pull/4034) fix bundles' compatibility with workers for those built in development mode ([@sodatea](https://github.com/sodatea))
+* `@vue/cli-ui`
+ * [#3992](https://github.com/vuejs/vue-cli/pull/3992) update dependencies and fix peer dependency warnings ([@sodatea](https://github.com/sodatea))
+ * [#3966](https://github.com/vuejs/vue-cli/pull/3966) fix `detectLanguage` function ([@maple3142](https://github.com/maple3142))
+
+#### :memo: Documentation
+* `@vue/cli-plugin-typescript`, `@vue/cli`
+ * [#4046](https://github.com/vuejs/vue-cli/pull/4046) add description of babel plugin usage in TS plugin prompt ([@sodatea](https://github.com/sodatea))
+
+#### :house: Internal
+* `@vue/cli-service`
+ * [#4018](https://github.com/vuejs/vue-cli/pull/4018) set `clientLogLevel` to `silent` instead of `none` ([@svtfrancisco](https://github.com/svtfrancisco))
+* `@vue/cli`
+ * [#4003](https://github.com/vuejs/vue-cli/pull/4003) refactor: replace recast with jscodeshift for `injectImportsAndOptions`, fixes [#3309](https://github.com/vuejs/vue-cli/issues/3309) ([@sodatea](https://github.com/sodatea))
+
+#### :hammer: Underlying Tools
+* `@vue/cli-service`
+ * [#4020](https://github.com/vuejs/vue-cli/pull/4020) upgrade webpack-dev-server to 3.4.1 ([@beardedpayton](https://github.com/beardedpayton))
+* `@vue/babel-preset-app`
+ * [#3978](https://github.com/vuejs/vue-cli/pull/3978) bump jsx dependency version ([@LinusBorg](https://github.com/LinusBorg))
+
+#### Committers: 9
+- Francisco ([@svtfrancisco](https://github.com/svtfrancisco))
+- Guillaume Chau ([@Akryum](https://github.com/Akryum))
+- Haoqun Jiang ([@sodatea](https://github.com/sodatea))
+- James George ([@jamesgeorge007](https://github.com/jamesgeorge007))
+- Luiz Victor Linhares Rocha ([@BigsonLvrocha](https://github.com/BigsonLvrocha))
+- Payton Burdette ([@beardedpayton](https://github.com/beardedpayton))
+- Thorsten Lünborg ([@LinusBorg](https://github.com/LinusBorg))
+- [@achretien](https://github.com/achretien)
+- maple ([@maple3142](https://github.com/maple3142))
+
+
## 3.7.0 (2019年04月28日)
-#### :rocket: New Feature
+#### :rocket: New Features
* `@vue/cli-service`
* [#3861](https://github.com/vuejs/vue-cli/pull/3861) feat: add `.version` field and `assertVersion` helper to plugin api ([@sodatea](https://github.com/sodatea))
* [#3847](https://github.com/vuejs/vue-cli/pull/3847) feat: add types for new `lintOnSave` options and multi-page entries ([@sodatea](https://github.com/sodatea))
@@ -59,7 +251,7 @@
* `@vue/cli-ui`
* [022e17d](https://github.com/vuejs/vue-cli/commit/022e17da5725742b0f425c0976b090bd1ce6581f) `--dev` shouldn't try to load dev assets, closes #3802 ([@Akryum](https://github.com/Akryum))
-#### :rocket: New Feature
+#### :rocket: New Features
* `@vue/cli-ui`
* [bbe4002](https://github.com/vuejs/vue-cli/commit/bbe4002480b46c8ce3721afe1285fea4f7bba3bf) **tasks**: override args switch, closes #3236 ([@Akryum](https://github.com/Akryum))
@@ -87,7 +279,7 @@
## 3.6.0 (2019年04月13日)
-#### :rocket: New Feature
+#### :rocket: New Features
* `@vue/cli-ui`
* [#3688](https://github.com/vuejs/vue-cli/pull/3688) add "copy content to clipboard" button on terminal component ([@pikax](https://github.com/pikax))
* [c81e6c](https://github.com/vuejs/vue-cli/commit/c81e6c21a20d66bfa66a664d94ec3ccc81c54d38) **project create**: bare option ([@Akryum](https://github.com/Akryum))
@@ -163,7 +355,7 @@
#### Bug Fixes
* should not add polyfills from transform-runtime plugin ([#3730](https://github.com/vuejs/vue-cli/issues/3730)) ([b987969](https://github.com/vuejs/vue-cli/commit/b987969))
-* should not use abosulte polyfill paths when `absoluteRuntime` is on ([#3732](https://github.com/vuejs/vue-cli/issues/3732)) ([9bdff3b](https://github.com/vuejs/vue-cli/commit/9bdff3b)), closes [#3725](https://github.com/vuejs/vue-cli/issues/3725)
+* should not use absolute polyfill paths when `absoluteRuntime` is on ([#3732](https://github.com/vuejs/vue-cli/issues/3732)) ([9bdff3b](https://github.com/vuejs/vue-cli/commit/9bdff3b)), closes [#3725](https://github.com/vuejs/vue-cli/issues/3725)
## cli-plugin-babel
@@ -1962,7 +2154,7 @@ and want to retain the previous behavior, you can configure webpack to use
`output.libraryExport: 'default'` in `vue.config.js`.
* **ui:** - `file-icon` for the configurations is removed
- Configuration objects `icon` option changed and is now working differently: you can either use a material icon code or a custom image (see Public static files in the UI Plugin docs).
-- Task objects have a new `icon` option wich works exactly the same
+- Task objects have a new `icon` option which works exactly the same
- By default, if no icon is provided for either the config or the task, the corresponding vue-cli plugin logo will be used instead (if any).
* jest is upgraded to 23.1.0 with minor breaking changes
but should not affect normal test cases
diff --git a/README.md b/README.md
index ce14ad24a4..450f20e08e 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# vue-cli [](https://circleci.com/gh/vuejs/vue-cli/tree/dev) [](https://ci.appveyor.com/project/yyx990803/vue-cli/branch/dev) [](https://lernajs.io/)
+# vue-cli [](https://circleci.com/gh/vuejs/vue-cli/tree/dev) [](https://ci.appveyor.com/project/yyx990803/vue-cli/branch/dev) [](https://lerna.js.org/)
> Vue CLI is the Standard Tooling for Vue.js Development.
diff --git a/docs/.vuepress/components/Bit.vue b/docs/.vuepress/components/Bit.vue
index e61eaafa1a..77a55fd085 100644
--- a/docs/.vuepress/components/Bit.vue
+++ b/docs/.vuepress/components/Bit.vue
@@ -1,6 +1,6 @@
-
+ This project is sponsored by
bit
diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js
index 29c529f169..40d22d8cc9 100644
--- a/docs/.vuepress/config.js
+++ b/docs/.vuepress/config.js
@@ -84,14 +84,14 @@ module.exports = {
{
text: 'Plugins',
items: [
- { text: 'Babel', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel' },
- { text: 'TypeScript', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript' },
- { text: 'ESLint', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint' },
- { text: 'PWA', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa' },
- { text: 'Jest', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-jest' },
- { text: 'Mocha', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-mocha' },
- { text: 'Cypress', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-e2e-cypress' },
- { text: 'Nightwatch', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-e2e-nightwatch' }
+ { text: 'Babel', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-babel' },
+ { text: 'TypeScript', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-typescript' },
+ { text: 'ESLint', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-eslint' },
+ { text: 'PWA', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-pwa' },
+ { text: 'Jest', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-unit-jest' },
+ { text: 'Mocha', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-unit-mocha' },
+ { text: 'Cypress', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-e2e-cypress' },
+ { text: 'Nightwatch', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-e2e-nightwatch' }
]
},
{
@@ -259,14 +259,14 @@ module.exports = {
{
text: 'Плагины',
items: [
- { text: 'Babel', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel' },
- { text: 'TypeScript', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript' },
- { text: 'ESLint', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint' },
- { text: 'PWA', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa' },
- { text: 'Jest', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-jest' },
- { text: 'Mocha', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-unit-mocha' },
- { text: 'Cypress', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-e2e-cypress' },
- { text: 'Nightwatch', link: 'https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-e2e-nightwatch' }
+ { text: 'Babel', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-babel' },
+ { text: 'TypeScript', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-typescript' },
+ { text: 'ESLint', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-eslint' },
+ { text: 'PWA', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-pwa' },
+ { text: 'Jest', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-unit-jest' },
+ { text: 'Mocha', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-unit-mocha' },
+ { text: 'Cypress', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-e2e-cypress' },
+ { text: 'Nightwatch', link: 'https://github.com/vuejs/vue-cli/tree/v3/packages/%40vue/cli-plugin-e2e-nightwatch' }
]
},
{
diff --git a/docs/config/README.md b/docs/config/README.md
index f9495f4050..6b3e8a7055 100644
--- a/docs/config/README.md
+++ b/docs/config/README.md
@@ -193,7 +193,7 @@ Deprecated since Vue CLI 3.3, please use [`publicPath`](#publicPath) instead.
::: warning Jest config
This option is not respected by the [cli-unit-jest plugin](#jest), because in jest, we don't have to transpile code from `/node_modules` unless it uses non-standard features - Node>8.11 supports the latest ECMAScript features already.
-However, jest sometimes has to transform content from node_modules if that code uses ES6 `import`/`export` syntax. In that case, use the `tranformIgnorePatterns` option in `jest.config.js`.
+However, jest sometimes has to transform content from node_modules if that code uses ES6 `import`/`export` syntax. In that case, use the `transformIgnorePatterns` option in `jest.config.js`.
See [the plugin's README](https://github.com/vuejs/vue-cli/blob/dev/packages/%40vue/cli-plugin-unit-jest/README.md) for more information.
:::
@@ -266,6 +266,8 @@ See [the plugin's README](https://github.com/vuejs/vue-cli/blob/dev/packages/%40
When building as a library, you can also set this to `false` to avoid your users having to import the CSS themselves.
Extracting CSS is disabled by default in development mode since it is incompatible with CSS hot reloading. However, you can still enforce extraction in all cases by explicitly setting the value to `true`.
+
+ Instead of a `true`, you can also pass an object of options for the [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) if you want to further configure what this plugin does exactly.
### css.sourceMap
diff --git a/docs/dev-guide/generator-api.md b/docs/dev-guide/generator-api.md
index 889b44bba5..20b7b9b4b2 100644
--- a/docs/dev-guide/generator-api.md
+++ b/docs/dev-guide/generator-api.md
@@ -1,5 +1,44 @@
# Generator API
+## cliVersion
+
+Type: `string`
+
+The version string for the **global** `@vue/cli` version that is invoking the plugin.
+
+
+## assertCliVersion
+
+- **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 satisfied. Otherwise, an error will be thrown.
+
+
+## cliServiceVersion
+
+Type: `string`
+
+The version string for the **project local** `@vue/cli-service` version that is invoking the plugin.
+
+
+## assertCliServiceVersion
+
+- **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 satisfied. 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..2559253021 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
@@ -17,7 +17,7 @@ The version string for the `@vue/cli-service` version that is loading the plugin
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.
+ Nothing happens if the provided version is satisfied. Otherwise, an error will be thrown.
## getCwd
diff --git a/docs/dev-guide/plugin-dev.md b/docs/dev-guide/plugin-dev.md
index 7197ae559d..8dbbda2229 100644
--- a/docs/dev-guide/plugin-dev.md
+++ b/docs/dev-guide/plugin-dev.md
@@ -102,7 +102,7 @@ A generator should export a function which receives three arguments:
And if the user creates a project using the `foo` preset, then the generator of `@vue/cli-plugin-foo` will receive `{ option: 'bar' }` as its second argument.
-For a 3rd party plugin, the options will be resolved from the prompts or command line arguments when the user executes `vue invoke` (see [Prompts for 3rd party plugins](#prompts-for-3rd-party-plugins)).
+For a 3rd party plugin, the options will be resolved from the prompts or command line arguments when the user executes `vue invoke` (see [Prompts](#prompts)).
3. The entire preset (`presets.foo`) will be passed as the third argument.
@@ -430,7 +430,56 @@ This is because the command's expected mode needs to be known before loading env
Prompts are required to handle user choices when creating a new project or adding a new plugin to the existing one. All prompts logic is stored inside the `prompts.js` file. The prompts are presented using [inquirer](https://github.com/SBoudrias/Inquirer.js) under the hood.
-When user initialize the plugin by calling `vue invoke`, if the plugin contains a `prompts.js` in its root directory, it will be used during invocation. The file should export an array of [Questions](https://github.com/SBoudrias/Inquirer.js#question) that will be handled by Inquirer.js. The resolved answers object will be passed to the plugin's generator as options.
+When user initialize the plugin by calling `vue invoke`, if the plugin contains a `prompts.js` in its root directory, it will be used during invocation. The file should export an array of [Questions](https://github.com/SBoudrias/Inquirer.js#question) that will be handled by Inquirer.js.
+
+You should export directly array of questions, or export function that return those.
+
+e.g. directly array of questions:
+```js
+// prompts.js
+
+module.exports = [
+ {
+ type: 'input',
+ name: 'locale',
+ message: 'The locale of project localization.',
+ validate: input => !!input,
+ default: 'en'
+ },
+ // ...
+]
+```
+
+e.g. function that return array of questions:
+```js
+// prompts.js
+
+// pass `package.json` of project to function argument
+module.exports = pkg => {
+ const prompts = [
+ {
+ type: 'input',
+ name: 'locale',
+ message: 'The locale of project localization.',
+ validate: input => !!input,
+ default: 'en'
+ }
+ ]
+
+ // add dynamically prompt
+ if ('@vue/cli-plugin-eslint' in (pkg.devDependencies || {})) {
+ prompts.push({
+ type: 'confirm',
+ name: 'useESLintPluginVueI18n',
+ message: 'Use ESLint plugin for Vue I18n ?'
+ })
+ }
+
+ return prompts
+}
+```
+
+The resolved answers object will be passed to the plugin's generator as options.
Alternatively, the user can skip the prompts and directly initialize the plugin by passing options via the command line, e.g.:
diff --git a/docs/dev-guide/ui-api.md b/docs/dev-guide/ui-api.md
index 89ccb21262..4ee32902fe 100644
--- a/docs/dev-guide/ui-api.md
+++ b/docs/dev-guide/ui-api.md
@@ -526,7 +526,7 @@ However, you can add the following additional fields (which are optional and onl
}
```
-Supported inquirer types: `checkbox`, `confirm`, `input`, `password`, `list`, `rawlist`.
+Supported inquirer types: `checkbox`, `confirm`, `input`, `password`, `list`, `rawlist`, `editor`.
In addition to those, the UI supports special types that only works with it:
diff --git a/docs/guide/browser-compatibility.md b/docs/guide/browser-compatibility.md
index 3f605d3d67..8942f8a5cd 100644
--- a/docs/guide/browser-compatibility.md
+++ b/docs/guide/browser-compatibility.md
@@ -89,6 +89,12 @@ Vue CLI uses two environment variables to communicate this:
**Important:** These variables are only accessible when/after `chainWebpack()` and `configureWebpack()` functions are evaluated, (so not directly in the `vue.config.js` module's root scope). That means it's also available in the postcss config file.
:::
+::: warning Caveat: Adjusting webpack plugins
+Some Plugins, i.e. `html-webpack-plugin`, `preload-plugin` etc. are only included in the config for modern mode. Trying to tap into their options in the legacy config can throw an error as the plugins don't exist.
+
+Use the above tip about *Detecting the Current Mode* to manipulate plugins in the right mode only, and/or check if the plugin actually exists in the current mode's config before trying to tap into their options.
+:::
+
[autoprefixer]: https://github.com/postcss/autoprefixer
[babel-preset-env]: https://new.babeljs.io/docs/en/next/babel-preset-env.html
[babel-preset-app]: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/babel-preset-app
diff --git a/docs/guide/creating-a-project.md b/docs/guide/creating-a-project.md
index 6183a92cd3..b71c85a800 100644
--- a/docs/guide/creating-a-project.md
+++ b/docs/guide/creating-a-project.md
@@ -8,6 +8,12 @@ To create a new project, run:
vue create hello-world
```
+A new project can also be generated inside an existing directory, like so:
+
+``` bash
+vue create .
+```
+
::: warning
If you are on Windows using Git Bash with minTTY, the interactive prompts will not work. You must launch the command as `winpty vue.cmd create hello-world`.
If you however want to still use the `vue create hello-world` syntax, you can alias the command by adding the following line to your `~/.bashrc` file.
diff --git a/docs/guide/deployment.md b/docs/guide/deployment.md
index f6e44b250c..d96a92de3d 100644
--- a/docs/guide/deployment.md
+++ b/docs/guide/deployment.md
@@ -35,6 +35,8 @@ If you are using the PWA plugin, your app must be served over HTTPS so that [Ser
### GitHub Pages
+#### Pushing updates manually
+
1. Set correct `publicPath` in `vue.config.js`.
If you are deploying to `https://.github.io/`, you can omit `publicPath` as it defaults to `"/"`.
@@ -48,6 +50,16 @@ If you are using the PWA plugin, your app must be served over HTTPS so that [Ser
: '/'
}
```
+
+ Also if you are using vue-router you want to override the base property like:
+
+ ``` js
+ const router = new VueRouter({
+ ...,
+ base: '/my-project/',
+ ...,
+ })
+ ```
2. Inside your project, create `deploy.sh` with the following content (with highlighted lines uncommented appropriately) and run it to deploy:
@@ -79,9 +91,39 @@ If you are using the PWA plugin, your app must be served over HTTPS so that [Ser
cd -
```
- ::: tip
- You can also run the above script in your CI setup to enable automatic deployment on each push.
- :::
+#### Using Travis CI for automatic updates
+
+1. Set correct `publicPath` in `vue.config.js` as explained above.
+
+2. Install the Travis CLI client: `gem install travis && travis --login`
+
+3. Generate a GitHub [access token](https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line)
+ with repo permissions.
+
+4. Grant the Travis job access to your repository: `travis set GITHUB_TOKEN=xxx`
+ (`xxx` is the personal access token from step 3.)
+
+5. Create a `.travis.yml` file in the root of your project.
+
+ ```yaml
+ language: node_js
+ node_js:
+ - "node"
+
+ cache: npm
+
+ script: npm run build
+
+ deploy:
+ provider: pages
+ skip_cleanup: true
+ github_token: $GITHUB_TOKEN
+ local_dir: dist
+ on:
+ branch: master
+ ```
+
+6. Push the `.travis.yml` file to your repository to trigger the first build.
### GitLab Pages
@@ -142,6 +184,28 @@ In order to receive direct hits using `history mode` on Vue Router, you need to
More information on [Netlify redirects documentation](https://www.netlify.com/docs/redirects/#history-pushstate-and-single-page-apps).
+### Render
+
+[Render](https://render.com) offers [free static site hosting](https://render.com/docs/static-sites) with fully managed SSL, a global CDN and continuous auto deploys from GitHub.
+
+1. Create a new Web Service on Render, and give Render’s GitHub app permission to access your Vue repo.
+
+2. Use the following values during creation:
+
+ - **Environment:** `Static Site`
+ - **Build Command:** `npm run build` or `yarn build`
+ - **Publish directory:** `dist`
+
+That’s it! Your app will be live on your Render URL as soon as the build finishes.
+
+In order to receive direct hits using history mode on Vue Router, you need to add the following rewrite rule in the `Redirects/Rewrites` tab for your site.
+
+ - **Source:** `/*`
+ - **Destination:** `/index.html`
+ - **Status** `Rewrite`
+
+Learn more about setting up [redirects, rewrites](https://render.com/docs/redirects-rewrites) and [custom domains](https://render.com/docs/custom-domains) on Render.
+
### Amazon S3
See [vue-cli-plugin-s3-deploy](https://github.com/multiplegeorges/vue-cli-plugin-s3-deploy).
@@ -209,51 +273,35 @@ You can now access your project on `https://.firebaseapp.com`.
Please refer to the [Firebase Documentation](https://firebase.google.com/docs/hosting/deploying) for more details.
-### Now
+### ZEIT Now
+
+[ZEIT Now](https://zeit.co) is a cloud platform for websites and serverless APIs, that you can use to deploy your Vue projects to your personal domain (or a free `.now.sh` suffixed URL).
+
+This guide will show you how to get started in a few quick steps:
-1. Install the Now CLI globally:
+#### Step 1: Installing Now CLI
+
+To install their command-line interface with [npm](https://www.npmjs.com/package/now), run the following command:
```bash
npm install -g now
```
-2. Add a `now.json` file to your project root:
-
- ```json
- {
- "name": "my-example-app",
- "type": "static",
- "static": {
- "public": "dist",
- "rewrites": [
- {
- "source": "**",
- "destination": "/index.html"
- }
- ]
- },
- "alias": "vue-example",
- "files": [
- "dist"
- ]
- }
- ```
+#### Step 2: Deploying
- You can further customize the static serving behavior by consulting [Now's documentation](https://zeit.co/docs/deployment-types/static).
+You can deploy your application by running the following command in the root of the project directory:
-3. Adding a deployment script in `package.json`:
+```bash
+now
+```
- ```json
- "deploy": "npm run build && now && now alias"
- ```
+**Alternatively**, you can also use their integration for [GitHub](https://zeit.co/github) or [GitLab](https://zeit.co/gitlab).
- If you want to deploy publicly by default, you can change the deployment script to the following one:
+That’s all!
- ```json
- "deploy": "npm run build && now --public && now alias"
- ```
+Your site will deploy, and you will receive a link similar to the following: [https://vue.now-examples.now.sh](https://vue.now-examples.now.sh)
- This will automatically point your site's alias to the latest deployment. Now, just run `npm run deploy` to deploy your app.
+Out of the box, you are already provided with the necessary routes for rewriting requests (except for custom static files) directly to your `index.html` file and the appropiate default caching headers. This behaviour can be overwritten [like this](https://zeit.co/docs/v2/advanced/routes/).
### Stdlib
@@ -261,7 +309,35 @@ npm install -g now
### Heroku
-> TODO | Open to contribution.
+1. [Install Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli)
+
+2. Create a `static.json` file:
+```json
+{
+ "root": "dist",
+ "clean_urls": true,
+ "routes": {
+ "/**": "index.html"
+ }
+}
+```
+
+3. Add `static.json` file to git
+```bash
+git add static.json
+git commit -m "add static configuration"
+```
+
+4. Deploy to Heroku
+```bash
+heroku login
+heroku create
+heroku buildpacks:add heroku/nodejs
+heroku buildpacks:add https://github.com/heroku/heroku-buildpack-static
+git push heroku master
+```
+
+More info: https://gist.github.com/hone/24b06869b4c1eca701f9
### Surge
@@ -320,7 +396,6 @@ Verify your project is successfully published by Surge by visiting `myawesomepro
cd -
```
-
### Docker (Nginx)
Deploy your application using nginx inside of a docker container.
diff --git a/docs/guide/html-and-static-assets.md b/docs/guide/html-and-static-assets.md
index b54acbc8e9..16a5bd47fc 100644
--- a/docs/guide/html-and-static-assets.md
+++ b/docs/guide/html-and-static-assets.md
@@ -27,7 +27,7 @@ See also:
[``](https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content) is a type of resource hint that is used to specify resources that your pages will need very soon after loading, which you therefore want to start preloading early in the lifecycle of a page load, before the browser's main rendering machinery kicks in.
-By default, a Vue CLI app will automatically generate preload hints for all files that are needed for the initial rendering the your app.
+By default, a Vue CLI app will automatically generate preload hints for all files that are needed for the initial rendering of your app.
The hints are injected using [@vue/preload-webpack-plugin](https://github.com/vuejs/preload-webpack-plugin) and can be modified / deleted via `chainWebpack` as `config.plugin('preload')`.
diff --git a/docs/guide/mode-and-env.md b/docs/guide/mode-and-env.md
index 16034c1d67..39b93d7af6 100644
--- a/docs/guide/mode-and-env.md
+++ b/docs/guide/mode-and-env.md
@@ -16,7 +16,7 @@ vue-cli-service build --mode development
When running `vue-cli-service`, environment variables are loaded from all [corresponding files](#environment-variables). If they don't contain a `NODE_ENV` variable, it will be set accordingly. For example, `NODE_ENV` will be set to `"production"` in production mode, `"test"` in test mode, and defaults to `"development"` otherwise.
-Then `NODE_ENV` will determine the primary mode your app is runnning in - development, production or test - and consequently, what kind of webpack config will be created.
+Then `NODE_ENV` will determine the primary mode your app is running in - development, production or test - and consequently, what kind of webpack config will be created.
With `NODE_ENV` set to "test" for example, Vue CLI creates a webpack config that is intended to be used and optimized for unit tests. It doesn't process images and other assets that are unnecessary for unit tests.
@@ -46,6 +46,8 @@ FOO=bar
VUE_APP_SECRET=secret
```
+Note that only variables that start with `VUE_APP_` will be statically embedded into the client bundle with `webpack.DefinePlugin`.
+
For more detailed env parsing rules, please refer to [the documentation of `dotenv`](https://github.com/motdotla/dotenv#rules). We also use [dotenv-expand](https://github.com/motdotla/dotenv-expand) for variable expansion (available in Vue CLI 3.5+).
Loaded variables will become available to all `vue-cli-service` commands, plugins and dependencies.
@@ -55,6 +57,8 @@ Loaded variables will become available to all `vue-cli-service` commands, plugin
An env file for a specific mode (e.g. `.env.production`) will take higher priority than a generic one (e.g. `.env`).
In addition, environment variables that already exist when Vue CLI is executed have the highest priority and will not be overwritten by `.env` files.
+
+`.env` files are loaded at the start of `vue-cli-service`. Restart the service after making changes.
:::
### Example: Staging Mode
@@ -80,7 +84,7 @@ In both cases, the app is built as a production app because of the `NODE_ENV`, b
### Using Env Variables in Client-side Code
-Only variables that start with `VUE_APP_` will be statically embedded into the client bundle with `webpack.DefinePlugin`. You can access them in your application code:
+You can access env variables in your application code:
``` js
console.log(process.env.VUE_APP_SECRET)
diff --git a/docs/guide/prototyping.md b/docs/guide/prototyping.md
index b30042791b..c56a7d03bc 100644
--- a/docs/guide/prototyping.md
+++ b/docs/guide/prototyping.md
@@ -20,9 +20,10 @@ serve a .js or .vue file in development mode with zero config
Options:
- -o, --open Open browser
- -c, --copy Copy local url to clipboard
- -h, --help output usage information
+ -o, --open Open browser
+ -c, --copy Copy local url to clipboard
+ -p, --port Port used by the server (default: 8080 or next available port)
+ -h, --help Output usage information
```
All you need is an `App.vue` file:
diff --git a/docs/ru/guide/README.md b/docs/ru/guide/README.md
index d7b3ce33a9..d5a8da7e1a 100644
--- a/docs/ru/guide/README.md
+++ b/docs/ru/guide/README.md
@@ -30,7 +30,7 @@ Vue CLI состоит из нескольких составных частей
### CLI
-CLI (`@vue/cli`) — это npm-пакет, устанавливаемый глобально и предоставляющий команду `vue` в терминале. Он позволяет быстро создать новый проект командой `vue create`, или мгновенно прототипировать ваши новые идеи через `vue serve`. Также можно управлять проектами в графическом интерфейсе через `vue ui`. Мы рассмотрим, что он может делать в следующих разделах руководства.
+CLI (`@vue/cli`) — это npm-пакет, устанавливаемый глобально и предоставляющий команду `vue` в терминале. Он позволяет быстро создать новый проект командой `vue create`, или мгновенно прототипировать ваши новые идеи через `vue serve`. Также можно управлять проектами в графическом интерфейсе через `vue ui`. Мы рассмотрим, что он может делать, в следующих разделах руководства.
### Сервис CLI
diff --git a/docs/ru/guide/browser-compatibility.md b/docs/ru/guide/browser-compatibility.md
index 221814379c..4427893b14 100644
--- a/docs/ru/guide/browser-compatibility.md
+++ b/docs/ru/guide/browser-compatibility.md
@@ -4,15 +4,15 @@
Вы заметите поле `browserslist` в файле `package.json` (или файл `.browserslistrc`), где определяется диапазон браузеров под которые разрабатывается проект. Эти значения будут использоваться в [@babel/preset-env][babel-preset-env] и [autoprefixer][autoprefixer] для автоматического определения возможностей JavaScript, которые требуется транспилировать, а также необходимые префиксные правила CSS.
-Как указывается диапазон браузеров можно узнать [здесь][browserslist].
+Как указывается диапазон браузеров, можно узнать [здесь][browserslist].
## Полифилы
-По умолчанию, проект Vue CLI использует [@vue/babel-preset-app][babel-preset-app], в котором используется `@babel/preset-env` и конфигурация `browserslist` для определения необходимых полифилов.
+По умолчанию проект Vue CLI использует [@vue/babel-preset-app][babel-preset-app], в котором используется `@babel/preset-env` и конфигурация `browserslist` для определения необходимых полифилов.
### useBuiltIns: 'usage'
-По умолчанию в `@babel/preset-env` будет передаваться [`useBuiltIns: 'usage'`](https://new.babeljs.io/docs/en/next/babel-preset-env.html#usebuiltins-usage) для автоматического определения необходимых полифилов, основываясь на том, какие возможности языка были использованы в исходном коде проекта. Это гарантирует, что в финальную сборку попадёт только минимально необходимое количество полифилов. Однако, это также означает, что **если одна из ваших зависимостей имеет специфичные требования к полифилам, то по умолчанию Babel не сможет это определить.**
+По умолчанию в `@babel/preset-env` будет передаваться [`useBuiltIns: 'usage'`](https://new.babeljs.io/docs/en/next/babel-preset-env.html#usebuiltins-usage) для автоматического определения необходимых полифилов, основываясь на том, какие возможности языка были использованы в исходном коде проекта. Это гарантирует, что в финальную сборку попадёт только минимально необходимое количество полифилов. Однако это также означает, что **если одна из ваших зависимостей имеет специфичные требования к полифилам, то по умолчанию Babel не сможет это определить.**
Если одной из ваших зависимостей требуются полифилы, у вас есть несколько вариантов:
@@ -38,17 +38,17 @@
Рекомендуется добавлять полифилы таким образом, а не напрямую импортировать их в коде, потому что полифилы перечисленные здесь, могут быть автоматически исключены, если целевым браузерам, указанным в `browserslist`, они не нужны.
:::
-3. **Если зависимость предоставляет ES5 код, но использует возможности ES6+ без явного перечисления необходимых полифилов (например, Vuetify):** Используйте `useBuiltIns: 'entry'` и затем добавьте `import '@babel/polyfill'` в файл точки входа. Это будет импортировать **ВСЕ** полифилы, на основе целей, перечисленных в `browserslist`, так что вам больше не нужно будет беспокоиться о полифилах для зависимостей, но это скорее всего увеличит размер финальной сборки некоторыми неиспользуемыми полифилами.
+3. **Если зависимость предоставляет ES5 код, но использует возможности ES6+ без явного перечисления необходимых полифилов (например, Vuetify):** Используйте `useBuiltIns: 'entry'` и затем добавьте `import '@babel/polyfill'` в файл точки входа. Это будет импортировать **ВСЕ** полифилы на основе целей, перечисленных в `browserslist`, так что вам больше не нужно будет беспокоиться о полифилах для зависимостей, но это скорее всего увеличит размер финальной сборки некоторыми неиспользуемыми полифилами.
Подробнее можно изучить в [документации @babel-preset/env](https://new.babeljs.io/docs/en/next/babel-preset-env.html#usebuiltins-usage).
### Полифилы при сборке библиотеки или веб-компонентов
-При использовании Vue CLI для [сборки библиотеки или веб-компонентов](./build-targets.md), рекомендуется указывать `useBuiltIns: false` для `@vue/babel-preset-app` чтобы отключить автоматическое добавление полифилов. Это гарантирует, что вы не добавляете ненужные полифилы в свой код, потому что полифилами должно будет заниматься приложение, где они будут использоваться.
+При использовании Vue CLI для [сборки библиотеки или веб-компонентов](./build-targets.md) рекомендуется указывать `useBuiltIns: false` для `@vue/babel-preset-app`, чтобы отключить автоматическое добавление полифилов. Это гарантирует, что вы не добавляете ненужные полифилы в свой код, потому что полифилами должно будет заниматься приложение, где они будут использоваться.
## Современный режим
-Благодаря Babel мы можем использовать все новейшие возможности языка ES2015+, но это также означает, что нам необходимо предоставлять транспилированную сборку с полифилами для поддержки старых браузеров. Эти транспилированные сборки зачастую больше в размере, чем оригинальный исходный код в ES2015+, а их парсинг и выполнение происходит медленнее. Учитывая, что сегодня у большинства современных браузеров есть прекрасная поддержка ES2015, становится пустой тратой необходимость предоставлять более тяжёлый и менее эффективный код для них лишь потому что должны поддерживать старые версии браузеров.
+Благодаря Babel мы можем использовать все новейшие возможности языка ES2015+, но это также означает, что нам необходимо предоставлять транспилированную сборку с полифилами для поддержки старых браузеров. Эти транспилированные сборки зачастую больше в размере, чем оригинальный исходный код в ES2015+, а их парсинг и выполнение происходит медленнее. Учитывая, что сегодня у большинства современных браузеров есть прекрасная поддержка ES2015, становится пустой тратой необходимость предоставлять более тяжёлый и менее эффективный код для них лишь потому, что мы должны поддерживать старые версии браузеров.
Vue CLI предоставляет «Современный режим», чтобы помочь в решении этой проблемы. При сборке для production с помощью следующей команды:
@@ -66,7 +66,7 @@ Vue CLI будет собирать **две версии** вашего при
- Исправление ошибки для `
diff --git a/packages/@vue/cli-ui/src/components/project-manager/ProjectSelectListItem.vue b/packages/@vue/cli-ui/src/components/project-manager/ProjectSelectListItem.vue
index 9f90b4865a..6259dad529 100644
--- a/packages/@vue/cli-ui/src/components/project-manager/ProjectSelectListItem.vue
+++ b/packages/@vue/cli-ui/src/components/project-manager/ProjectSelectListItem.vue
@@ -44,6 +44,13 @@
@click.stop
/>
+
+
+
+