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/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 c8628c14e..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,52 +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 - } - // Git - if (input.enableGit && input.gitCommitMessage) { - createOptions.git = input.gitCommitMessage - } else { - createOptions.git = input.enableGit - } - // Preset answers.preset = input.preset if (input.save) { @@ -329,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/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/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/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 }} -
+
{{ $t('org.vue.components.project-select-list-item.tooltips.favorite') }} 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/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') }} + {{ $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 @@
{ 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' }) diff --git a/yarn.lock b/yarn.lock index cb5af9533..d3ce9c643 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" @@ -6387,7 +6386,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== @@ -7348,7 +7347,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== @@ -10914,11 +10913,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" @@ -16789,7 +16783,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==