node 搭建简易脚手架

#!/usr/bin/env node
const fs = require('fs');
const program = require('commander');
const download = require('download-git-repo');
const handlebars = require('handlebars');
const inquirer = require('inquirer');
const ora = require('ora');
const chalk = require('chalk');
const symbols = require('log-symbols');

program
    .version('1.0.0', '-v, --version')
    .command('init <name>')
    .action(name => {
        if (!fs.existsSync(name)) {
            inquirer
                .prompt([
                    {
                        name: 'description',
                        message: '请输入项目描述',
                    },
                    {
                        name: 'author',
                        message: '请输入作者名称',
                    },
                ])
                .then(answers => {
                    const spinner = ora('正在下载模板...');
                    spinner.start();
                    download(
                        'git项目地址',
                        name,
                        { clone: true },
                        err => {
                            if (err) {
                                spinner.fail();
                                console.log(symbols.error, chalk.red(err));
                            } else {
                                spinner.succeed();
                                const fileName = `${name}/package.json`;
                                const meta = {
                                    name,
                                    description: answers.description,
                                    author: answers.author,
                                };
                                if (fs.existsSync(fileName)) {
                                    const content = fs.readFileSync(fileName).toString();
                                    const result = handlebars.compile(content)(meta);
                                    fs.writeFileSync(fileName, result);
                                }
                                console.log(symbols.success, chalk.green('项目初始化完成'));
                            }
                        }
                    );
                });
        } else {
            // 错误提示项目已存在,避免覆盖原有项目
            console.log(symbols.error, chalk.red('项目已存在'));
        }
    });
program.parse(process.argv);

npm link
npm publish

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容