当前位置: 首页 > 后端技术 > Node.js

使用nodejs搭建脚手架

时间:2023-04-03 12:32:48 Node.js

1前言1.1和大家熟悉的vue-cli、taro-cli等脚手架一样,只需要输入一个简单的命令taroinitproject,就可以快速为我们生成一个初始项目。在日常开发中,有一个脚手架工具可以用来提高工作效率。1.2为什么需要搭建脚手架,减少重复性工作,从头开始创建项目和文件。根据交互动态生成项目结构和配置文件等。多人协作更方便,无需来回传递文件??。1.3如何建造?脚手架是如何搭建的?我用的是taro-cli的思路。1.4本文的目标读者1想要了解更多,了解更多的人2热爱技术的人2搭建前的准备工作2.1第三方工具commander.js可以自动解析命令和参数来处理用户输入的命令。download-git-repo,下载并解压git仓库,用于下载项目模板。Inquirer.js,一组用于与用户交互的通用命令行用户界面。handlebars.js是一个模板引擎,它使用用户提交的信息动态填充文件。ora,如果下载过程较长,可以用来显示下载时的动画效果。粉笔,您可以为终端的字体添加颜色。og-symbols,可以在终端显示√或×等图标相关nodejs进阶视频讲解进入学习2.2入门2.2.1新建文件夹,然后npminitinitializenpm不仅仅用来管理你的应用程序和网页依赖,您还可以使用它来打包和分发新的shell命令。$mkdirlq-cli$npminit这个时候我们的lq-cli项目中有一个package.json文件,接下来我们需要创建一个包含我们脚本的JS文件,我们命名为index.js。package.json的内容如下{"name":"lq-shell","version":"1.0.0","description":"Scaffolding","main":"index.js","bin":{"lq":"./index.js"},"scripts":{"test":"test"},"keywords":["cli"],"author":"prune","license":"isc"}index.js内容如下#!/usr/bin/envnodeconsole.log('Hello,cli!');此时,你可以简单的运行这个命令npmlinklqnpmlink命令可以将任意位置的npm包链接到全局执行环境,这样就可以在任何地方直接通过命令行运行npm包。控制台会输出Hello,cli!2.2.2抓取前面小节的init等命令,可以运行一个命令行,但是我们在taro-cli中看到了一些命令,比如init来初始化项目。这时候就需要用到指挥官了。运行以下命令会将最新版本的commander添加到package.jsonnpminstall--savecommandertoimportcommander我们将修改index.js如下#!/usr/bin/envnodeconsole.log('Hello,cli!')constprogram=require('commander')program.version(require('./package').version,'-v,--version').command('init').action((name)=>{console.log(name)})program.parse(process.argv)可以通过lq-v查看版本号通过lqinitname的运行,action中会打印出name2.2.3。对于consoleart,我们看到taro的init命令中会有一些色标,因为引入了chalk包,也和commander一样。npminstall--savechalkconsole.log(chalk.green('initcreation'))会输出同样的绿色2.2.4模板下载download-git-repo支持从Github下载仓库。详情请参考官方文档。npminstall--savedownload-git-repodownload()第一个参数是仓库地址。详见官方文档2.2.5命令行交互命令行交互功能可以在用户执行init命令后向用户提问。接收用户输入并进行相应处理。用inquirer.js实现。npminstall--saveinquirerindex.js文件如下#!/usr/bin/envnodeconstchalk=require('chalk')console.log('Hello,cli!')console.log(chalk.green('initcreate'))constprogram=require('commander')constdownload=require('download-git-repo')constinquirer=require('inquirer')program.version(require('./package').版本,'-v,--version').command('init').action((name)=>{console.log(name)inquirer.prompt([{type:'input',name:'author',message:'请输入你的名字'}]).then((answers)=>{console.log(answers.author)download('',name,{clone:true},(err)=>{console.log(err?'Error':'Success')})})})program.parse(process.argv)2.2.6ora进度显示npminstall--saveora相关命令可以如下constora=require('ora')//开始下载constproce=ora('Downloadingtemplate...')proce.start()//下载失败调用proce.fail()//下载成功调用proce.succeed()2.2.6log-symbols在信息前加√或×图标npminstall--savelog-symbols相关命令可以如下constchalk=require('chalk')constsymbols=require('log-symbols')console.log(symbols.success,chalk.green('SUCCESS'))console.log(symbols.error,chalk.red('FAIL'))2.2.7完整文件如下#!/usr/bin/envnodeconstchalk=require('chalk')console.log('你好,cli!')console.log(chalk.green('initcreate'))constfs=require('fs')constprogram=require('commander')constdownload=require('download-git-repo')constinquirer=require('inquirer')constora=require('ora')constsymbols=require('日志符号')consthandlebars=require('handlebars')program.version(require('./package').version,'-v,--version').command('init').action(name=>{console.log(name)inquirer.prompt([{type:'input',name:'author',message:'Pleaseenteryourname'}]).then(answers=>{console.log(answers.author)constlqProcess=ora('Creating...')lqProcess.start()download('direct:https://github.com/Chant-Lee/rick-cli-templates1.git',name,{clone:true},err=>{if(err){lqProcess.fail()console.log(symbols.error,chalk.red(err))}else{lqProcess.succeed()constfileName=`${name}/package.json`constmeta={名称,作者:answers.author}if(fs.existsSync(fileName)){constcontent=fs.readFileSync(fileName).toString()constresult=handlebars.compile(content)(meta)fs.writeFileSync(fileName,result)}console.log(symbols.success,chalk.green('创建成功'))}})})})program.parse(process.argv)总结通过上面的例子,只能搭建一个简单的脚手架工具。事实上,bash可以做很多事情,比如npm包优雅地处理标准输入、管理并行任务、监听文件、管道流、压缩、ssh、git等。如果你想了解更多,你需要了解更多,这里只是一扇敞开的门,学海无涯1.1和我们熟悉的vue-cli,taro-cli等脚手架一样,只需要输入一个简单的命令taroinitproject就可以快速为我们生成一个初始项目。在日常开发中,有一个脚手架工具可以用来提高工作效率。1.2为什么需要搭建脚手架,减少重复性工作,从头开始创建项目和文件。根据交互动态生成项目结构和配置文件等。多人协作更方便,无需来回传递文件??。1.3如何建造?脚手架是如何搭建的?我用的是taro-cli的思路。1.4本文的目标读者1想要了解更多,了解更多的人2热爱技术的人2搭建前的准备工作2.1第三方工具commander.js可以自动解析命令和参数来处理用户输入的命令。download-git-repo,下载并解压git仓库,用于下载项目模板。Inquirer.js,一组用于与用户交互的通用命令行用户界面。handlebars.js是一个模板引擎,它使用用户提交的信息动态填充文件。ora,如果下载过程较长,可以用来显示下载时的动画效果。粉笔,您可以为终端的字体添加颜色。og-symbols,可以在终端显示√或×等图标相关nodejs进阶视频讲解进入学习2.2入门2.2.1新建文件夹,然后npminitinitializenpm不仅仅用来管理你的应用程序和网页依赖,您还可以使用它来打包和分发新的shell命令。$mkdirlq-cli$npminit这个时候我们的lq-cli项目中有一个package.json文件,接下来我们需要创建一个包含我们脚本的JS文件,我们命名为index.js。package.json的内容如下{"name":"lq-shell","version":"1.0.0","description":"Scaffolding","main":"index.js","bin":{"lq":"./index.js"},"scripts":{"test":"test"},"keywords":["cli"],"author":"prune","license":"isc"}index.js内容如下#!/usr/bin/envnodeconsole.log('Hello,cli!');此时,你可以简单的运行这个命令npmlinklqnpmlink命令可以将任意位置的npm包链接到全局执行环境,这样就可以在任何地方直接通过命令行运行npm包。控制台会输出Hello,cli!2.2.2抓取前面小节的init等命令,可以运行一个命令行,但是我们在taro-cli中看到了一些命令,比如init来初始化项目。这时候就需要用到指挥官了。运行以下命令会将最新版本的commander添加到package.jsonnpminstall--savecommandertoimportcommander我们将修改index.js如下#!/usr/bin/envnodeconsole.log('Hello,cli!')constprogram=require('commander')program.version(require('./package').version,'-v,--version').command('init').action((name)=>{console.log(name)})program.parse(process.argv)可以通过lq-v查看版本号通过lqinitname的运行,action中会打印出name2.2.3。对于consoleart,我们看到taro的init命令中会有一些色标,因为引入了chalk包,也和commander一样。npminstall--savechalkconsole.log(chalk.green('initcreation'))会输出同样的绿色2.2.4模板下载download-git-repo支持从Github下载仓库。详情请参考官方文档。npminstall--savedownload-git-repodownload()第一个参数是仓库地址。详见官方文档2.2.5命令行交互命令行交互功能可以在用户执行init命令后向用户提问。接收用户输入并进行相应处理。用inquirer.js实现。npminstall--saveinquirerindex.js文件如下#!/usr/bin/envnodeconstchalk=require('chalk')console.log('Hello,cli!')console.log(chalk.green('initcreate'))constprogram=require('commander')constdownload=require('download-git-repo')constinquirer=require('inquirer')program.version(require('./package').版本,'-v,--version').command('init').action((name)=>{console.log(name)inquirer.prompt([{type:'input',name:'author',message:'请输入你的名字'}]).then((answers)=>{console.log(answers.author)download('',name,{clone:true},(err)=>{console.log(err?'Error':'Success')})})})program.parse(process.argv)2.2.6ora进度显示npminstall--saveora相关命令可以如下constora=require('ora')//开始下载constproce=ora('Downloadingtemplate...')proce.start()//下载失败调用proce.fail()//下载成功调用proce.succeed()2.2.6log-symbols在信息前加√或×图标npminstall--savelog-symbols相关命令可以如下constchalk=require('chalk')constsymbols=require('log-symbols')console.log(symbols.success,chalk.green('SUCCESS'))console.log(symbols.error,chalk.red('FAIL'))2.2.7完整文件如下#!/usr/bin/envnodeconstchalk=require('chalk')console.log('你好,cli!')console.log(chalk.green('initcreate'))constfs=require('fs')constprogram=require('commander')constdownload=require('download-git-repo')constinquirer=require('inquirer')constora=require('ora')constsymbols=require('日志符号')consthandlebars=require('handlebars')program.version(require('./package').version,'-v,--version').command('init').action(name=>{console.log(name)inquirer.prompt([{type:'input',name:'author',message:'Pleaseenteryourname'}]).then(answers=>{console.log(answers.author)constlqProcess=ora('Creating...')lqProcess.start()download('direct:https://github.com/Chant-Lee/rick-cli-templates1.git',name,{clone:true},err=>{if(err){lqProcess.fail()console.log(symbols.error,chalk.red(err))}else{lqProcess.succeed()constfileName=`${name}/package.json`constmeta={名称,作者:answers.author}if(fs.existsSync(fileName)){constcontent=fs.readFileSync(fileName).toString()constresult=handlebars.compile(content)(meta)fs.writeFileSync(fileName,result)}console.log(symbols.success,chalk.green('创建成功'))}})})})program.parse(process.argv)总结通过上面的例子,只能搭建一个简单的脚手架工具。事实上,bash可以做很多事情,比如npm包优雅地处理标准输入、管理并行任务、监听文件、管道流、压缩、ssh、git等。如果你想了解更多,你需要了解更多,这里只是一扇敞开的门,学海无涯