65 lines
1.8 KiB
JavaScript
65 lines
1.8 KiB
JavaScript
// +----------------------------------------------------------------------
|
||
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
||
// +----------------------------------------------------------------------
|
||
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
|
||
// +----------------------------------------------------------------------
|
||
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
||
// +----------------------------------------------------------------------
|
||
// | Author: CRMEB Team <admin@crmeb.com>
|
||
// +----------------------------------------------------------------------
|
||
const { notEmpty } = require('../utils.js')
|
||
|
||
module.exports = {
|
||
description: 'generate vue component',
|
||
prompts: [{
|
||
type: 'input',
|
||
name: 'name',
|
||
message: 'component name please',
|
||
validate: notEmpty('name')
|
||
},
|
||
{
|
||
type: 'checkbox',
|
||
name: 'blocks',
|
||
message: 'Blocks:',
|
||
choices: [{
|
||
name: '<template>',
|
||
value: 'template',
|
||
checked: true
|
||
},
|
||
{
|
||
name: '<script>',
|
||
value: 'script',
|
||
checked: true
|
||
},
|
||
{
|
||
name: 'style',
|
||
value: 'style',
|
||
checked: true
|
||
}
|
||
],
|
||
validate(value) {
|
||
if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
|
||
return 'Components require at least a <script> or <template> tag.'
|
||
}
|
||
return true
|
||
}
|
||
}
|
||
],
|
||
actions: data => {
|
||
const name = '{{properCase name}}'
|
||
const actions = [{
|
||
type: 'add',
|
||
path: `src/components/${name}/index.vue`,
|
||
templateFile: 'plop-templates/component/index.hbs',
|
||
data: {
|
||
name: name,
|
||
template: data.blocks.includes('template'),
|
||
script: data.blocks.includes('script'),
|
||
style: data.blocks.includes('style')
|
||
}
|
||
}]
|
||
|
||
return actions
|
||
}
|
||
}
|