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

从零开始搭建一个节点脚手架工具(二)

时间:2023-04-03 21:26:35 Node.js

接上一篇从零开始搭建一个节点脚手架工具(一)项目地址:YOSO:youonlysetonce前言在第一篇文章中,我们已经完成了这个节点命令linetool的框架搭建完成,已经可以接收命令,在action中执行相应的操作。那么接下来要写的就是动作中的具体内容了。按照之前的设计,action中需要做的主要包括模板下载,模板渲染,以及方便的ui界面。模板下载网络请求部分我使用了axios,然后自己封装了一个请求文件,拦截返回的状态码,并做出相应的提示。由于我们的模板存放在github仓库中,一般来说一个github仓库会存放多个模板文件,所以我们一定不能直接clone整个仓库,而是下载指定的文件或文件夹。此处要使用的api是获取一棵树。api返回git仓库根目录的文件结构树。如果加上recursive=1参数,则返回整个git仓库中的所有文件结构树。先查询根目录下有哪些模板或模板文件,然后获取想要的模板文件或模板文件夹下所有文件的路径,最后到github数据库(https://raw.githubusercontent...:username/:repo/:branch/:url)一个一个地下载文件。这里唯一需要注意的是,调用githubAPI需要提供token进行鉴权,否则会有访问频率限制。因此,在记录所使用的github仓库的相关信息的同时,记录下token。这里我多建了一个config命令,使用react做的ui界面,让用户输入github名称、仓库名称、分支名称和token,然后存入本地的全局配置文件中。模板渲染模板渲染主要是模板引擎的选择。在比较了几个流行的模板引擎之后,我选择了Mozilla的nunjucks。原因是handlebars、pug、ejs等模板引擎主要是用来渲染html代码的。为了方便,会有一些特殊的语法,可能会和我们模板中的js代码冲突。同时,为了防止xss攻击,这些模板引擎默认都会有转义处理,这也会给脚手架工具带来不必要的麻烦。所以最后选择了nunjucks,它的语法也很简单,很像vue的模板语言,可以在两个花括号之间插值或者进行一些计算。模板引擎的使用也非常简单一句话。//tpl:模板数据:contextvarcompiledData=nunjucks.renderString(tpl,data);使用react编写UI这里是这个脚手架工具的亮点,使用react编写命令行的UI界面。大家都对react不陌生,但是将react作为命令行工具来使用,对于大部分人来说可能比较陌生。在这里我要介绍一个非常强大的工具墨水。通过这个工具,我也了解到了react的多才多艺。使用react写ui就不用多说了,照常写就行,可以用class或者function,只是有些标签需要修改,比如

变成,还有很多,你可以参考文档了解详情。特别是,ink还有一个判断命令结束的标签,,例如:returnfinish?({({exit})=>{setTimeout(exit);return({finish});}}):();这是一个非常简单的代码。渲染的结果是,一般情况下,是一个表,一个输入。如果触发了一个操作,finish值变为true,比如输入某个字符,渲染结果就会变成{finish}同时,命令结束。写好后,使用ink提供的render函数,在命令行渲染写好的react界面,非常方便。import{Component}from'../component/Component'import{render}from'ink';render()specific,也可以在我的git项目中查看。至此,一个脚手架工具就做好了。接下来要做的就是编写自己需要的模板文件,优化脚手架工具的使用体验。因为可以用react,很多事情就变得方便多了。还有更多可以优化的东西。比如我在我的脚手架工具中加入了模板搜索功能,如下图,就像一个搜索引擎,让交互更加友好。还有很多其他事情可以做。