| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | #!/usr/bin/env node'use strict';/** * 代码生成器 * * @author CaiAoLin * @date 2018/2/1 * @version */const path = require('path');const fs = require('fs');const command = [];const params = {};const rootDir = path.resolve(__dirname, '..');const appDir = rootDir + '\\app\\';const controllerDir = appDir + 'controller\\';const serviceDir = appDir + 'service\\';const viewDir = appDir + 'view\\';const templateDir = rootDir + '\\tool\\templates\\';process.argv.forEach(function(param, index) {    // 前两个命令忽略 (node 以及当前js目录)    if (index <= 1) {        return false;    }    if (index === 2) {        // 记录命令        command.push(param);    } else {        const paramInfo = param.split(':');        params[paramInfo[0]] = paramInfo.length !== 2 ? '' : paramInfo[1];    }});if (command.length <= 0) {    console.log('命令错误!');}const moduleCommand = command[0];selectModule(moduleCommand);/** * 模块选择 * * @param {String} moduleCommand - 模块命令 * @return {void} */function selectModule(moduleCommand) {    const commandInfo = moduleCommand.split(':');    if (commandInfo.length !== 2) {        console.log('命令参数错误');        return;    }    // 读入模板数据    const templateFile = templateDir + commandInfo[0] + '.txt';    const templateContent = fs.existsSync(templateFile) ? fs.readFileSync(templateFile) : '';    switch (commandInfo[0]) {        case 'controller':            addFile(commandInfo[1], templateContent, 'controller');            break;        case 'service':            addFile(commandInfo[1], templateContent, 'service');            break;        case 'all':            const controllerContent = fs.readFileSync(templateDir + 'controller.txt');            const serviceContent = fs.readFileSync(templateDir + 'service.txt');            const viewContent = fs.readFileSync(templateDir + 'view.txt');            addFile(commandInfo[1], controllerContent, 'controller');            addFile(commandInfo[1], serviceContent, 'service');            addFile(commandInfo[1], viewContent, 'view');            break;        default:            break;    }}/** * 新增文件 * * @param {String} name - 文件名 * @param {String} content - 写入内容 * @param {String} type - 文件类型 * @return {void} */function addFile(name, content, type) {    // 模板变量定义    const current = new Date();    const templateData = {        date: current.getFullYear() + '/' + (current.getMonth() + 1) + '/' + current.getDate(),    };    let fileName = '';    let writeDir = '';    switch (type) {        case 'controller':            fileName = name + '_controller.js';            // 处理文件大小写            templateData.name = convertName(name);            writeDir = controllerDir + fileName;            break;        case 'service':            fileName = name + '.js';            // 处理文件大小写            templateData.name = convertName(name);            templateData.table = params.table === undefined ? name.toLowerCase() : params.table;            writeDir = serviceDir + fileName;            break;        case 'view':            // 判断是否有对应的文件夹            const folderName = params.folder === undefined ? name.toLowerCase() : params.folder;            const folder = viewDir + folderName;            if (!fs.existsSync(folder)) {                fs.mkdirSync(folder);            }            fileName = name + '.ejs';            writeDir = folder + '\\' + fileName;            break;        default:            console.log('不支持对应的模块');            return;    }    // 替换模板变量    content = templateVarReplace(content, templateData);    // 写入文件    fs.writeFileSync(writeDir, content);}/** * 替换模板变量 * * @param {String} content - 模板文件内容 * @param {Object} templateData - 变量替换内容 * @return {String} - 返回替换后的内容 */function templateVarReplace(content, templateData) {    content = content.toString();    if (templateData.name !== undefined) {        content = content.replace(/{{NAME}}/g, templateData.name);    }    if (templateData.date !== undefined) {        content = content.replace(/{{DATE}}/g, templateData.date);    }    if (templateData.table !== undefined) {        content = content.replace(/{{TABLE}}/g, templateData.table);    }    return content;}/** * 处理文件名(把test_test转换为大驼峰模式TestTest) * * @param {String} content - 待转换内容 * @return {String} - 转换后的结果 */function convertName(content) {    let result = '';    const contentArray = content.split('_');    for (const tmp of contentArray) {        result += tmp.substring(0, 1).toUpperCase() + tmp.substring(1);    }    return result;}
 |