From c81e6c21a20d66bfa66a664d94ec3ccc81c54d38 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Sat, 6 Apr 2019 01:16:02 +0200 Subject: [PATCH 1/6] feat(project create): bare option --- .../@vue/cli-ui/apollo-server/connectors/projects.js | 3 ++- packages/@vue/cli-ui/apollo-server/schema/project.js | 1 + packages/@vue/cli-ui/locales/en.json | 1 + .../src/components/project-create/ProjectCreate.vue | 9 +++++++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/@vue/cli-ui/apollo-server/connectors/projects.js b/packages/@vue/cli-ui/apollo-server/connectors/projects.js index c8628c14e..8474fbad9 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/projects.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/projects.js @@ -295,7 +295,8 @@ async function create (input, context) { } const createOptions = { - packageManager: input.packageManager + packageManager: input.packageManager, + bare: input.bare } // Git if (input.enableGit && input.gitCommitMessage) { diff --git a/packages/@vue/cli-ui/apollo-server/schema/project.js b/packages/@vue/cli-ui/apollo-server/schema/project.js index 301f395bc..3a4c182d6 100644 --- a/packages/@vue/cli-ui/apollo-server/schema/project.js +++ b/packages/@vue/cli-ui/apollo-server/schema/project.js @@ -44,6 +44,7 @@ enum ProjectType { input ProjectCreateInput { folder: String! force: Boolean! + bare: Boolean! packageManager: PackageManager preset: String! remote: String diff --git a/packages/@vue/cli-ui/locales/en.json b/packages/@vue/cli-ui/locales/en.json index 3f23877c4..764399d9d 100644 --- a/packages/@vue/cli-ui/locales/en.json +++ b/packages/@vue/cli-ui/locales/en.json @@ -280,6 +280,7 @@ "options": { "label": "Additional options", "force": "Overwrite target folder if it exists", + "bare": "Scaffold project without beginner instructions", "git-title": "Git repository", "git": "Initialize git repository (recommended)", "git-commit-message": "Initial commit message (optional)" diff --git a/packages/@vue/cli-ui/src/components/project-create/ProjectCreate.vue b/packages/@vue/cli-ui/src/components/project-create/ProjectCreate.vue index d0c630779..ca5a9e7aa 100644 --- a/packages/@vue/cli-ui/src/components/project-create/ProjectCreate.vue +++ b/packages/@vue/cli-ui/src/components/project-create/ProjectCreate.vue @@ -108,6 +108,13 @@ > {{ $t('org.vue.views.project-create.tabs.details.form.options.force') }} + + + {{ $t('org.vue.views.project-create.tabs.details.form.options.bare') }} + Date: Sat, 6 Apr 2019 01:48:02 +0200 Subject: [PATCH 2/6] refactor(project create): run vue create in child process, closes #3664 --- .../cli-ui/apollo-server/connectors/logs.js | 17 ++++ .../apollo-server/connectors/projects.js | 81 +++++++++++-------- .../src/components/app/ProgressScreen.vue | 8 +- packages/@vue/cli/bin/vue.js | 1 + packages/@vue/cli/lib/Creator.js | 12 +-- 5 files changed, 77 insertions(+), 42 deletions(-) diff --git a/packages/@vue/cli-ui/apollo-server/connectors/logs.js b/packages/@vue/cli-ui/apollo-server/connectors/logs.js index d779ebbba..2c5b37fb1 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/logs.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/logs.js @@ -1,3 +1,14 @@ +/** @typedef {'warn' | 'error' | 'info' | 'done'} LogType */ + +/** + * @typedef Log + * @prop {string} id + * @prop {string} date + * @prop {LogType} type + * @prop {string} tag + * @prop {string} message + */ + const shortId = require('shortid') const { events } = require('@vue/cli-shared-utils/lib/logger') const { generateTitle } = require('@vue/cli/lib/util/clearConsole') @@ -6,9 +17,15 @@ const channels = require('../channels') // Context const getContext = require('../context') +/** @type {Log []} */ let logs = [] +/** + * @param {Log} log + * @param {any} context + */ exports.add = function (log, context) { + /** @type {Log} */ const item = { id: shortId.generate(), date: new Date().toISOString(), diff --git a/packages/@vue/cli-ui/apollo-server/connectors/projects.js b/packages/@vue/cli-ui/apollo-server/connectors/projects.js index 8474fbad9..c4b41679d 100644 --- a/packages/@vue/cli-ui/apollo-server/connectors/projects.js +++ b/packages/@vue/cli-ui/apollo-server/connectors/projects.js @@ -5,7 +5,7 @@ const Creator = require('@vue/cli/lib/Creator') const { getPromptModules } = require('@vue/cli/lib/util/createTools') const { getFeatures } = require('@vue/cli/lib/util/features') const { defaults } = require('@vue/cli/lib/options') -const { toShortPluginId, clearModule } = require('@vue/cli-shared-utils') +const { toShortPluginId, execa } = require('@vue/cli-shared-utils') const { progress: installProgress } = require('@vue/cli/lib/util/installDeps') const parseGitConfig = require('parse-git-config') // Connectors @@ -15,6 +15,7 @@ const prompts = require('./prompts') const folders = require('./folders') const plugins = require('./plugins') const locales = require('./locales') +const logs = require('./logs') // Context const getContext = require('../context') // Utils @@ -258,53 +259,23 @@ async function create (input, context) { const targetDir = path.join(cwd.get(), input.folder) - // Delete existing folder - if (fs.existsSync(targetDir)) { - if (input.force) { - setProgress({ - info: 'Cleaning folder...' - }) - await folders.delete(targetDir) - setProgress({ - info: null - }) - } else { - throw new Error(`Folder ${targetDir} already exists`) - } - } - cwd.set(targetDir, context) creator.context = targetDir - process.env.VUE_CLI_CONTEXT = targetDir - clearModule('@vue/cli-service/webpack.config.js', targetDir) - const inCurrent = input.folder === '.' - const name = inCurrent ? path.relative('../', process.cwd()) : input.folder - creator.name = name.toLowerCase() + const name = creator.name = (inCurrent ? path.relative('../', process.cwd()) : input.folder).toLowerCase() // Answers const answers = prompts.getAnswers() await prompts.reset() - let index // Config files + let index if ((index = answers.features.indexOf('use-config-files')) !== -1) { answers.features.splice(index, 1) answers.useConfigFiles = 'files' } - const createOptions = { - packageManager: input.packageManager, - bare: input.bare - } - // Git - if (input.enableGit && input.gitCommitMessage) { - createOptions.git = input.gitCommitMessage - } else { - createOptions.git = input.enableGit - } - // Preset answers.preset = input.preset if (input.save) { @@ -330,7 +301,49 @@ async function create (input, context) { }) // Create - await creator.create(createOptions, preset) + const args = [ + '--skipGetStarted' + ] + if (input.packageManager) args.push('--packageManager', input.packageManager) + if (input.bar) args.push('--bare') + if (input.force) args.push('--force') + // Git + if (input.enableGit && input.gitCommitMessage) { + args.push('--git', input.gitCommitMessage) + } else if (!input.enableGit) { + args.push('--no-git') + } + // Preset + args.push('--inlinePreset', JSON.stringify(preset)) + + log('create', name, args) + + const child = execa('vue', [ + 'create', + name, + ...args + ], { + cwd: cwd.get(), + stdio: ['inherit', 'pipe', 'inherit'] + }) + + const onData = buffer => { + const text = buffer.toString().trim() + if (text) { + setProgress({ + info: text + }) + logs.add({ + type: 'info', + message: text + }, context) + } + } + + child.stdout.on('data', onData) + + await child + removeCreator() notify({ diff --git a/packages/@vue/cli-ui/src/components/app/ProgressScreen.vue b/packages/@vue/cli-ui/src/components/app/ProgressScreen.vue index 532d94fd0..ea62e17c1 100644 --- a/packages/@vue/cli-ui/src/components/app/ProgressScreen.vue +++ b/packages/@vue/cli-ui/src/components/app/ProgressScreen.vue @@ -32,9 +32,11 @@
-
- {{ progress.info }} -
+
{ const options = cleanArgs(cmd) diff --git a/packages/@vue/cli/lib/Creator.js b/packages/@vue/cli/lib/Creator.js index bbcfde38f..b6c5e85e1 100644 --- a/packages/@vue/cli/lib/Creator.js +++ b/packages/@vue/cli/lib/Creator.js @@ -210,11 +210,13 @@ module.exports = class Creator extends EventEmitter { stopSpinner() log() log(`🎉 Successfully created project ${chalk.yellow(name)}.`) - log( - `👉 Get started with the following commands:\n\n` + - (this.context === process.cwd() ? `` : chalk.cyan(` ${chalk.gray('$')} cd ${name}\n`)) + - chalk.cyan(` ${chalk.gray('$')} ${packageManager === 'yarn' ? 'yarn serve' : 'npm run serve'}`) - ) + if (!cliOptions.skipGetStarted) { + log( + `👉 Get started with the following commands:\n\n` + + (this.context === process.cwd() ? `` : chalk.cyan(` ${chalk.gray('$')} cd ${name}\n`)) + + chalk.cyan(` ${chalk.gray('$')} ${packageManager === 'yarn' ? 'yarn serve' : 'npm run serve'}`) + ) + } log() this.emit('creation', { event: 'done' }) From 6fe42e92548a0f1b6df376e6b9f30ef675de4712 Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Sat, 6 Apr 2019 02:26:02 +0200 Subject: [PATCH 3/6] fix(style): font-weight lighter => 300 --- .../cli-ui-addon-webpack/src/components/WebpackDashboard.vue | 4 ++-- packages/@vue/cli-ui-addon-widgets/src/components/Welcome.vue | 2 +- packages/@vue/cli-ui/src/components/app/TopBar.vue | 2 +- packages/@vue/cli-ui/src/components/content/StepWizard.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptsList.vue | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@vue/cli-ui-addon-webpack/src/components/WebpackDashboard.vue b/packages/@vue/cli-ui-addon-webpack/src/components/WebpackDashboard.vue index f5a1df6eb..eaa27c436 100644 --- a/packages/@vue/cli-ui-addon-webpack/src/components/WebpackDashboard.vue +++ b/packages/@vue/cli-ui-addon-webpack/src/components/WebpackDashboard.vue @@ -96,7 +96,7 @@ export default { .title color lighten($vue-ui-color-dark, 60%) font-size 20px - font-weight lighter + font-weight 300 text-align center margin-bottom $padding-item @@ -108,7 +108,7 @@ export default { .info-block v-box() box-center() - font-weight lighter + font-weight 300 text-align center .label diff --git a/packages/@vue/cli-ui-addon-widgets/src/components/Welcome.vue b/packages/@vue/cli-ui-addon-widgets/src/components/Welcome.vue index ccb7118a6..bb200dd41 100644 --- a/packages/@vue/cli-ui-addon-widgets/src/components/Welcome.vue +++ b/packages/@vue/cli-ui-addon-widgets/src/components/Welcome.vue @@ -69,7 +69,7 @@ export default { .title font-size 32px - font-weight lighter + font-weight 300 text-align center margin-bottom ($padding-item * 2) diff --git a/packages/@vue/cli-ui/src/components/app/TopBar.vue b/packages/@vue/cli-ui/src/components/app/TopBar.vue index 6924df6d4..779446429 100644 --- a/packages/@vue/cli-ui/src/components/app/TopBar.vue +++ b/packages/@vue/cli-ui/src/components/app/TopBar.vue @@ -31,5 +31,5 @@ .title font-size 28px - font-weight lighter + font-weight 300 diff --git a/packages/@vue/cli-ui/src/components/content/StepWizard.vue b/packages/@vue/cli-ui/src/components/content/StepWizard.vue index 3dc5ece1c..816583a63 100644 --- a/packages/@vue/cli-ui/src/components/content/StepWizard.vue +++ b/packages/@vue/cli-ui/src/components/content/StepWizard.vue @@ -112,7 +112,7 @@ export default { padding $padding-item font-size 24px text-align center - font-weight lighter + font-weight 300 &.hide-tabs >>> .tabs diff --git a/packages/@vue/cli-ui/src/components/prompt/PromptsList.vue b/packages/@vue/cli-ui/src/components/prompt/PromptsList.vue index e9ce5c18b..8ff15c4bb 100644 --- a/packages/@vue/cli-ui/src/components/prompt/PromptsList.vue +++ b/packages/@vue/cli-ui/src/components/prompt/PromptsList.vue @@ -79,7 +79,7 @@ export default { .group-name padding $padding-item $padding-item ($padding-item / 2) font-size 1.6em - font-weight lighter + font-weight 300 color $vue-ui-color-accent .vue-ui-dark-mode & color lighten($vue-ui-color-accent, 60%) From f42de72c18f2a12e138e5bde7410a40def73f5da Mon Sep 17 00:00:00 2001 From: Guillaume Chau Date: Sat, 6 Apr 2019 16:14:55 +0200 Subject: [PATCH 4/6] chore: update @vue/ui to 0.8.2 --- packages/@vue/cli-ui/package.json | 2 +- yarn.lock | 24 +++++++++--------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/packages/@vue/cli-ui/package.json b/packages/@vue/cli-ui/package.json index b094a08b5..18f3eb271 100644 --- a/packages/@vue/cli-ui/package.json +++ b/packages/@vue/cli-ui/package.json @@ -66,7 +66,7 @@ "@vue/cli-plugin-eslint": "^3.5.1", "@vue/cli-service": "^3.5.3", "@vue/eslint-config-standard": "^4.0.0", - "@vue/ui": "^0.5.5", + "@vue/ui": "^0.8.2", "ansi_up": "^3.0.0", "cross-env": "^5.1.5", "eslint": "^5.8.0", diff --git a/yarn.lock b/yarn.lock index 3e306469b..4188da7ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1970,15 +1970,14 @@ dom-event-types "^1.0.0" lodash "^4.17.4" -"@vue/ui@^0.5.5": - version "0.5.6" - resolved "https://registry.yarnpkg.com/@vue/ui/-/ui-0.5.6.tgz#7c39b04a3b08ae3f217d2323987ae13347a90b29" - integrity sha512-NmxJsFk8umipCbKLusz6L27DQIicpt8jLOjN1aLjyBIeX3t4H5RFshxH7IUtjDPtgOYGwwq7gy86bmFkDDBsIQ== +"@vue/ui@^0.8.2": + version "0.8.2" + resolved "https://registry.yarnpkg.com/@vue/ui/-/ui-0.8.2.tgz#371fe1a9a81093b63f4acf1f63aaf676bde746a2" + integrity sha512-R6wPk8VIy9GNE7lpdZA4AFpAP3yyAxW2KW4sMilluS609OzAs1y8WG2xiq0buB0MCit9YcL9N0TZR05PYLTx3g== dependencies: - focus-visible "^4.1.4" - material-design-icons "^3.0.1" + focus-visible "^4.1.5" v-tooltip "^2.0.0-rc.33" - vue-resize "^0.4.4" + vue-resize "^0.4.5" "@vue/web-component-wrapper@^1.2.0": version "1.2.0" @@ -6382,7 +6381,7 @@ eslint-plugin-vue@^4.5.0, eslint-plugin-vue@^4.7.1: dependencies: vue-eslint-parser "^2.0.3" -eslint-plugin-vue@^5.2.2: +eslint-plugin-vue@^5.0.0, eslint-plugin-vue@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz#86601823b7721b70bc92d54f1728cfc03b36283c" integrity sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA== @@ -7343,7 +7342,7 @@ fn-name@~2.0.1: resolved "https://registry.yarnpkg.com/fn-name/-/fn-name-2.0.1.tgz#5214d7537a4d06a4a301c0cc262feb84188002e7" integrity sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc= -focus-visible@^4.1.4: +focus-visible@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/focus-visible/-/focus-visible-4.1.5.tgz#50b44e2e84c24b831ceca3cce84d57c2b311c855" integrity sha512-yo/njtk/BB4Z2euzaZe3CZrg4u5s5uEi7ZwbHBJS2quHx51N0mmcx9nTIiImUGlgy+vf26d0CcQluahBBBL/Fw== @@ -10897,11 +10896,6 @@ material-colors@^1.0.0: resolved "https://registry.yarnpkg.com/material-colors/-/material-colors-1.2.6.tgz#6d1958871126992ceecc72f4bcc4d8f010865f46" integrity sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg== -material-design-icons@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/material-design-icons/-/material-design-icons-3.0.1.tgz#9a71c48747218ebca51e51a66da682038cdcb7bf" - integrity sha1-mnHEh0chjrylHlGmbaaCA4zct78= - math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -16772,7 +16766,7 @@ vue-property-decorator@^8.0.0: dependencies: vue-class-component "^7.0.1" -vue-resize@^0.4.3, vue-resize@^0.4.4: +vue-resize@^0.4.3, vue-resize@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-0.4.5.tgz#4777a23042e3c05620d9cbda01c0b3cc5e32dcea" integrity sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg== From 14e54dca8e6abc3648b69121de103234a3a79311 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Sun, 7 Apr 2019 20:34:00 +0800 Subject: [PATCH 5/6] fix: be more specific on date-fns locale paths somehow webpack resolves the main file to index.d.ts, causing build errors. --- packages/@vue/cli-ui/src/i18n.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@vue/cli-ui/src/i18n.js b/packages/@vue/cli-ui/src/i18n.js index 45f8219ae..2cd567d54 100644 --- a/packages/@vue/cli-ui/src/i18n.js +++ b/packages/@vue/cli-ui/src/i18n.js @@ -54,7 +54,7 @@ async function autoDetect () { name: 'VueTimeago', locale: i18n.locale, locales: { - [i18n.locale]: require(`date-fns/locale/${dateFnsLocale}`) + [i18n.locale]: require(`date-fns/locale/${dateFnsLocale}/index.js`) } })) } From 3e1692424ad56c9749c2667206a4c9fc6ae73125 Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Sun, 7 Apr 2019 20:35:42 +0800 Subject: [PATCH 6/6] fix: model event is `update` instead of `input` since `@vue/ui` 0.6 --- .../@vue/cli-ui/src/components/app/ProjectQuickDropdown.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptCheckbox.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptColor.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptConfirm.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptInput.vue | 2 +- packages/@vue/cli-ui/src/components/prompt/PromptList.vue | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/@vue/cli-ui/src/components/app/ProjectQuickDropdown.vue b/packages/@vue/cli-ui/src/components/app/ProjectQuickDropdown.vue index 764adca8c..7a380b635 100644 --- a/packages/@vue/cli-ui/src/components/app/ProjectQuickDropdown.vue +++ b/packages/@vue/cli-ui/src/components/app/ProjectQuickDropdown.vue @@ -13,7 +13,7 @@ :value="projectCurrent.favorite" :icon="projectCurrent.favorite ? 'star' : 'star_border'" class="extend-left" - @input="toggleCurrentFavorite()" + @update="toggleCurrentFavorite()" > {{ $t('org.vue.components.project-select-list-item.tooltips.favorite') }} diff --git a/packages/@vue/cli-ui/src/components/prompt/PromptCheckbox.vue b/packages/@vue/cli-ui/src/components/prompt/PromptCheckbox.vue index 9c5d8b543..11d4fa261 100644 --- a/packages/@vue/cli-ui/src/components/prompt/PromptCheckbox.vue +++ b/packages/@vue/cli-ui/src/components/prompt/PromptCheckbox.vue @@ -16,7 +16,7 @@ :value="isCheckboxSelected(choice)" :disabled="choice.disabled" class="right" - @input="value => asnwerCheckbox(choice, value)" + @update="value => asnwerCheckbox(choice, value)" > {{ $t(choice.name) }} diff --git a/packages/@vue/cli-ui/src/components/prompt/PromptColor.vue b/packages/@vue/cli-ui/src/components/prompt/PromptColor.vue index 45120beac..ceee528da 100644 --- a/packages/@vue/cli-ui/src/components/prompt/PromptColor.vue +++ b/packages/@vue/cli-ui/src/components/prompt/PromptColor.vue @@ -16,7 +16,7 @@
diff --git a/packages/@vue/cli-ui/src/components/prompt/PromptList.vue b/packages/@vue/cli-ui/src/components/prompt/PromptList.vue index 0125240ac..9249475bf 100644 --- a/packages/@vue/cli-ui/src/components/prompt/PromptList.vue +++ b/packages/@vue/cli-ui/src/components/prompt/PromptList.vue @@ -13,7 +13,7 @@