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 @@