node 构建脚手架

1、创建项目npm init -y

2、安装包
“chalk”: “^4.1.0”,
“clear”: “^0.1.0”,
“commander”: “^7.1.0”,
“download-git-repo”: “^3.0.2”,
“figlet”: “^1.5.0”,
“handlebars”: “^4.7.7”,
“inquirer”: “^8.0.0”,
“open”: “^8.0.2”,
“ora”: “^5.4.0”

a、chalk 包的作用是修改控制台中字符串的样式,包括:
字体样式(加粗、隐藏等)
字体颜色
背景颜色

b、clear 清空控制台样式

c、使用commander插件来进行命令行工具的开发工作。Commander.js 是 一个帮助快速开发Nodejs命令行工具的package。

d、download-git-repo:在执行 node 时,需要从 github 下载源码。

e、figlet 打印欢迎页面

f、Handlebars 模板引擎,是一个语义化的模板,它看起来和 HTML 一样,只是嵌入了 handlebars 表达式。

g、inquirer 与用户命令交互、引导

h、ora 加载动画

在package.json
bin{
“vue”: “./bin/init.js”
}

#!/usr/bin/env node
const program = require('commander')
program.version(require('../package').version)
program
    .command('init <name>')
    .description('init project')
    .action(require('../lib/index.js'))

program.parse(process.argv)

index.js

const {promisify} = require('util')
const figlet = promisify(require('figlet'))
const clear = require('clear')
const chalk = require('chalk')
const log = content => console.log(chalk.green(content))
const {clone} = require('./download')


module.exports = async name => {
    //打印页面
    clear()
    const data = await figlet('kkb welcome')
    log('🚀创建项目' + name)
    await clone('direct:https://github.com/xxx',name)
}

download.js

const {promisify} = require('util')
module.exports.clone = async (repo,desc)=>{
    const download = promisify(require('download-git-repo'))
    const inquirer = require('inquirer')
    const fs = require('fs')
    const handlebars = require('handlebars')

    const ora = require('ora')
    const process = ora(`下载...${repo}`)
    process.start()
    await download(repo,desc,{clone: true}, err => {
        console.log(err?'err':'success')
        console.log(err)
        process.succeed()
        inquirer.prompt([{
            type: 'input',
            name: 'name',
            message: '请输入项目名称'
        },{
            type: 'input',
            name: 'description',
            message: '请输入项目简介'
        },{
            type: 'input',
            name: 'author',
            message: '请输入作者名称'
        }]).then((answers)=>{
            console.log(answers)
            const packagePath = `${desc}/package.json`
            const packageContent = fs.readFileSync(packagePath,'utf8')
            const packageResult =  handlebars.compile(packageContent)(answers)
            fs.writeFileSync(packagePath,packageResult)
            console.log('成功')
        })
    })
}

这样一个简单的脚手架就可以了,但这个是要去把你的架构放在github上,从github上下载的。

后续写一个本地下载构建的脚手架,不需要github

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值