Files
vue-cli/packages/@vue/cli/lib/util/inferRootOptions.js
2020-12-02 15:11:49 +08:00

52 lines
1.3 KiB
JavaScript

// Infer rootOptions for individual generators being invoked
// in an existing project.
const { semver, isPlugin } = require('@vue/cli-shared-utils')
module.exports = function inferRootOptions (pkg) {
const rootOptions = {}
const deps = Object.assign({}, pkg.dependencies, pkg.devDependencies)
// projectName
rootOptions.projectName = pkg.name
if ('vue' in deps) {
const vue2Range = new semver.Range('^2.0.0', { includePrerelease: true })
const vue3Range = new semver.Range('^3.0.0-0', { includePrerelease: true })
const depVueVersion = semver.minVersion(new semver.Range(deps.vue))
if (semver.satisfies(depVueVersion, vue3Range)) {
rootOptions.vueVersion = '3'
} else if (semver.satisfies(depVueVersion, vue2Range)) {
rootOptions.vueVersion = '2'
}
}
// router
if ('vue-router' in deps) {
rootOptions.router = true
}
// vuex
if ('vuex' in deps) {
rootOptions.vuex = true
}
// cssPreprocessors
if ('sass' in deps) {
rootOptions.cssPreprocessor = 'sass'
} else if ('less-loader' in deps) {
rootOptions.cssPreprocessor = 'less'
} else if ('stylus-loader' in deps) {
rootOptions.cssPreprocessor = 'stylus'
}
rootOptions.plugins = Object.keys(deps)
.filter(isPlugin)
.reduce((plugins, name) => {
plugins[name] = {}
return plugins
}, {})
return rootOptions
}