zoro-cli
Version:
https://github.com/vuejs/vue-cli
98 lines (93 loc) • 2.42 kB
JavaScript
module.exports = ({ api, rootOptions, Types }) => {
const { mobile, pc, weblib, nodelib, node, ui } = Types
const isWeblib = ({ type }) => type === weblib
const isWebOrWeblib = ({ type }) =>
type === mobile || type === pc || type === weblib
api.injectTypes([
{ name: 'web mobile 项目', value: mobile },
{ name: 'web pc 项目', value: pc },
{ name: 'web npm library (rollup)', value: weblib },
{ name: 'node npm library', value: nodelib },
{ name: 'node 项目 (koa/egg/chair 等)', value: node },
])
let defaultUI
if (rootOptions.ui === false) {
defaultUI = false
} else {
defaultUI = isWeblib ? false : ui[0]
}
return [
{
type: 'list',
name: 'ui',
message: '选择前端框架',
default: defaultUI,
when: isWebOrWeblib,
choices: () => {
const no = {
name: '不需要',
value: false,
}
return [no, ...ui]
},
},
{
type: 'list',
name: 'bundler',
message: '请选择打包工具',
default: rootOptions.bundler,
when: isWeblib,
choices: [{ value: 'rollup' }, { value: 'webpack' }],
},
{
name: 'cssPreprocessor',
type: 'list',
message: 'Pick a CSS pre-processor',
default: rootOptions.cssPreprocessor,
when: isWebOrWeblib,
choices: ({ type }) => {
const no = {
name: '不需要',
value: false,
}
const cssPreprocessors = [
{
name: 'PostCSS',
value: 'postcss',
},
{
name: 'SCSS/SASS',
value: 'sass',
},
{
name: 'LESS',
value: 'less',
},
{
name: 'Stylus',
value: 'stylus',
},
]
return isWeblib({ type }) ? [no, ...cssPreprocessors] : cssPreprocessors
},
},
{
name: 'rem',
type: 'list',
message: '是否要开启自动将 px 转 rem 的功能',
default: !!rootOptions.rem,
// 只要有 cssPreprocessor, 那么就询问是否需要转 rem
when: ({ cssPreprocessor }) => !!cssPreprocessor,
choices: [
{
name: '不开启',
value: false,
},
{
name: '开启, 请查阅生成的 postcss.config.js',
value: true,
},
],
},
]
}