从零开始开发自己的脚手架工具cli系列:fs:读文件和写文件;

·  阅读 18

携手创作,共同成长!这是我参与「掘金日新计划 · 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);

复制代码
分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改