mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-20 14:19:59 -06:00
48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
const chalk = require('chalk')
|
|
const semver = require('semver')
|
|
const invoke = require('./invoke')
|
|
|
|
const PackageManager = require('./util/ProjectPackageManager')
|
|
const {
|
|
log,
|
|
error,
|
|
resolvePluginId,
|
|
isOfficialPlugin
|
|
} = require('@vue/cli-shared-utils')
|
|
const confirmIfGitDirty = require('./util/confirmIfGitDirty')
|
|
|
|
async function add (pluginName, options = {}, context = process.cwd()) {
|
|
if (!(await confirmIfGitDirty(context))) {
|
|
return
|
|
}
|
|
|
|
const packageName = resolvePluginId(pluginName)
|
|
|
|
log()
|
|
log(`📦 Installing ${chalk.cyan(packageName)}...`)
|
|
log()
|
|
|
|
const pm = new PackageManager({ context })
|
|
|
|
const cliVersion = require('../package.json').version
|
|
if (isOfficialPlugin(packageName) && semver.prerelease(cliVersion)) {
|
|
await pm.add(`${packageName}@^${cliVersion}`)
|
|
} else {
|
|
await pm.add(packageName)
|
|
}
|
|
|
|
log(`${chalk.green('✔')} Successfully installed plugin: ${chalk.cyan(packageName)}`)
|
|
log()
|
|
|
|
invoke(pluginName, options, context)
|
|
}
|
|
|
|
module.exports = (...args) => {
|
|
return add(...args).catch(err => {
|
|
error(err)
|
|
if (!process.env.VUE_CLI_TEST) {
|
|
process.exit(1)
|
|
}
|
|
})
|
|
}
|