携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第19天,点击查看活动详情
创建模版文件
基础vue模版
module.exports = function () {
return `
<template>
<div></div>
</template>
<script>
export default {
data() {
return {}
}
methods: {
}
}
</sctipt>
<style lang="scss" scoped>
</style>
`;
};
基础react模版
module.exports = function (className) {
return `
import * as React from 'react';
export class ${className} extends React.Component{
constructor(props){
super(props);
this.state = {}
}
componentDidMount(){
}
render() {
return (
<div></div>
)
}
}
`;
};
文件模版列表
const reactClass = require('./reactClass');
const vueTemplate = require('./vueTemplate');
module.exports = [
{ name: 'reactClass', src: reactClass,fileType:'.jsx' },
{ name: 'vueTemplate', src: vueTemplate,fileType:'.vue' }
];
读模版配置
// 引入模板文件
const templates = require('../bin/templates/index');
// 命令行选择列表
const prompList = [
{
type: 'list',
name: 'template',
message: '请选择你想要生成的模板?',
choices: templates,
default: templates[0]
}
];
module.exports = {
templates,
prompList
};
完整代码示例
#!/usr/bin/env node
// 'use strict';
// const path = require('path');
const { program } = require('commander');
const inquirer = require('inquirer');
// 处理文件
const fs = require("fs");
const { minify } = require('../lib/minify');
const { upload } = require('../lib/upload');
const { templates,prompList } = require('../utils/constant');
const { release } = require('../lib/release');
const { init } = require('../lib/init');
// cli版本
program.version(require('../package').version, '-v, --version', '查看版本');
// TODO: 压缩文件、上传、打包
// 初始化
program
.command('init')
.description('初始化')
.action(async () => {
init(false);
});
// 创建模版
program
.command('create <filename>')
.description('创建一个文件')
.action(async (filename) => {
const res = await inquirer.prompt(prompList);
Object.keys(templates).forEach((key) => {
if (res.template === templates[key].name) {
console.log(key, templates[key]);
const target = templates[key];
fs.writeFile(`./${filename}${target.fileType}`, target.src(filename), function (err) {
if (err) {
console.log('创建失败:', err);
} else {
console.log(`创建文件成功!${filename}${target.fileType}`);
}
});
}
});
});
// 创建文件夹
// 创建文件夹命令行
program
.command('create-f <folder>')
.description('创建一个文件夹')
.action((folder) => {
console.log('create', folder);
if (fs.existsSync(folder)) {
console.log('文件夹已存在');
} else {
fs.mkdirSync(folder);
console.log('文件夹创建成功');
}
});
// minify
program
.command('minify')
.description('压缩')
.option('-s,--srcfolder <srcfolder>', '待压缩文件夹路径')
.option('-o,--outfolder <outfolder>', '压缩输出文件夹路径')
.action((res) => {
const { srcfolder, outfolder } = res;
minify(srcfolder, outfolder);
});
// upload
program
.command('upload')
.description('上传文件')
.action(async () => {
upload();
});
// release
program
.command('release')
.description('打包文件')
.option('-s,--srcfolder <srcfolder>', '待打包文件夹路径')
.option('-o,--outfolder <outfolder>', '打包输出文件夹路径')
.action(async (res) => {
const { srcfolder, outfolder } = res;
release(srcfolder, outfolder);
});
// 处理命令行输入的参数
program.parse(process.argv);