114 lines
2.1 KiB
JavaScript
114 lines
2.1 KiB
JavaScript
const { resolve } = require('path')
|
|
const { gray, green } = require('kolorist')
|
|
const { createConsola } = require('consola')
|
|
const { existsSync, lstatSync } = require('fs')
|
|
const { removeSync, emptyDirSync } = require('fs-extra')
|
|
|
|
function slash(path) {
|
|
return path.replace(/\\/g, '/')
|
|
}
|
|
|
|
function r(dir) {
|
|
return slash(resolve(__dirname, '../', dir))
|
|
}
|
|
|
|
const entrys = [
|
|
'src/components',
|
|
'src/api',
|
|
'mock',
|
|
'layouts/default.vue',
|
|
'src/pages/index.vue',
|
|
'src/pages/about.md',
|
|
'src/pages/echarts.vue',
|
|
'src/stores',
|
|
'locales/简体中文',
|
|
'locales/English',
|
|
]
|
|
|
|
const resolvedEntrys = entrys.map((entry) => r(entry))
|
|
|
|
/**
|
|
* 安全初始化
|
|
* @param {import('plop').NodePlopAPI} plop
|
|
*/
|
|
function safeInit(plop) {
|
|
const logger = createConsola().withTag('safe:init')
|
|
|
|
logger.warn('实验性功能')
|
|
|
|
plop.setGenerator('controller', {
|
|
description: '安全初始化',
|
|
prompts: [
|
|
{
|
|
name: 'yes',
|
|
type: 'confirm',
|
|
message: '是否安全的初始化?',
|
|
default: false,
|
|
},
|
|
{
|
|
name: 'cleanStyles',
|
|
type: 'confirm',
|
|
message: '是否清理 styles?',
|
|
default: false,
|
|
},
|
|
],
|
|
actions(answer) {
|
|
if (!answer.yes) {
|
|
return []
|
|
}
|
|
|
|
if (answer.cleanStyles) {
|
|
resolvedEntrys.push(r('src/styles'))
|
|
}
|
|
|
|
console.log()
|
|
|
|
// 这里不用异步是因为 plop action 只支持同步
|
|
resolvedEntrys.forEach((e) => {
|
|
if (!existsSync(e)) {
|
|
return
|
|
}
|
|
const entry = lstatSync(e)
|
|
if (entry.isFile()) {
|
|
removeSync(e)
|
|
logClean(e)
|
|
return
|
|
}
|
|
|
|
if (entry.isDirectory()) {
|
|
emptyDirSync(e)
|
|
logClean(e)
|
|
}
|
|
})
|
|
|
|
return [
|
|
{
|
|
type: 'add',
|
|
force: true,
|
|
path: '../src/pages/index.vue',
|
|
templateFile: './template/page.hbs',
|
|
data: {
|
|
name: 'index',
|
|
isMarkdown: false,
|
|
},
|
|
},
|
|
{
|
|
type: 'add',
|
|
force: true,
|
|
path: '../src/layouts/default.vue',
|
|
templateFile: './template/layout.hbs',
|
|
data: {
|
|
name: 'default',
|
|
},
|
|
},
|
|
]
|
|
},
|
|
})
|
|
}
|
|
|
|
function logClean(path) {
|
|
console.log(`${green('√ clean')} ${gray(path)}`)
|
|
}
|
|
|
|
module.exports = safeInit
|