博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手把手教你撸一个脚手架工具
阅读量:7247 次
发布时间:2019-06-29

本文共 1543 字,大约阅读时间需要 5 分钟。

前言

JavaScript 的生态可谓是目前所有语言中最繁荣的一个,前端开发就有 Angular, React, Vue 三大天王,小众一点的还有 Cycle.js, Turbine 等等,样式库有 Bootstrap, Foundation,静态类型检查有 TypeScript, Flow.js,状态管理有 Redux, MobX, Vuex 等等等等,不胜枚举。

这么大规模且优质的开源库就使得开发者各有所好,官方的 CLI 往往只带有最常用的组件,以我较为熟悉的 React 为例,由于官方推出的 不支持装饰器,并且不支持 Flow.js,也没有自带路由库,因此在使用 CLI 生成后,我还要配置一大堆东西。

对于开发者个人而言,一旦选定了技术栈之后,往往不太容易经常变更,所以项目配置基本上都是重复的操作。

不得不提 是一个优秀的脚手架工具,但是上面模板太多,都不知道该怎么选,新建脚手架又有些繁琐,故此我萌生了写一个脚手架工具的想法。

Tacer

给项目起名是件很复杂的事情。我思索良久,决定把 React 倒过来(tcaer)再略微变形,就成了 Tacer 这个名字。

选定名字之后,作为一个命令行工具,我们应该先确定一下有哪些命令可用。

# 将当前目录作为模板添加到 Tacer 中tacer add 
# 使用给定模板新建项目tacer
# 下载远程模板tacer get
# 删除模板tacer rm
# 列出模板清单tacer ls复制代码

五个命令,一目了然,妈妈再也不用担心我没有脚手架了。

命令

add

我们在 homedir 中找出一块区域来存放模板文件

import os from 'os'const homedir = os.homedir()const templatesDir = `${homedir}/.tacer/templates`复制代码

为了减少内存占用,我们使用 `compressing· 库来压缩模板

import { zip } from 'compressing'async function add(name) {    const dest = `${templatesDir}/${name}.zip`    await zip.compressDir('.', dest)}复制代码

新建

我们使用 compressing 进行解压缩操作

import os from `os`async function create(template, path) {    await zip.uncompress(`${templatesDir}/${template}.zip`, path)}复制代码

后面 3 个命令实现略去不表,因为我也还没写完。

到这里,我们就有了一个简单的可以生成和复用的脚手架工具,你只需要搭好一个模板,使用 tacer add <template-name> 保存之后,就可以任意复用了。

后记

读到这里你可能会说,“这不只是一个简单的压缩解压操作吗,我把模板放上 GitHub 同样可以做复用“。的确,如果只是这么简单的话,完全犯不上为它写一遍文章。完整版的 支持.tpl.ejs 两种模板文件,有更大的想象空间,一一写出来太累,想了解具体实现可以去 GitHub 上看看源码,更可以顺手给我个星星哟!

转载于:https://juejin.im/post/5c852843f265da2dda69827f

你可能感兴趣的文章
高性能磁盘 I/O 开发学习笔记 -- 硬件原理篇
查看>>
一个还算优雅的 react 图片组件
查看>>
JSON应知应会
查看>>
一个PHP文件搞定支付宝系列之手机网站支付(兼容微信浏览器)
查看>>
设计模式之代理模式
查看>>
客服系统从Require.js到Webpack
查看>>
React 16 中的异常处理
查看>>
独家解析Javascript原型继承
查看>>
springboot集成mqtt
查看>>
重拾css(3)——学习css的思路
查看>>
SegmentFault 社区访谈 | 有位公子在奇舞
查看>>
jQuery源码分析之jQuery的定义
查看>>
一些经典面试题分析(上)
查看>>
[JS相关的记录01] 那什么来面对你,面向对象编程(__proto__,prototype,constructor以及原型链)...
查看>>
夏日葵电商:搭建一个商城系统,N+功能方案揭秘!
查看>>
Akka系列(一):Akka简介与Actor模型
查看>>
yii2获得从数据库获得数据的方法并处理
查看>>
Android开发百度地图(一)之初体验
查看>>
微服务指南走北(四):你不愿意做微服务架构的十个理由
查看>>
CSS代码重构与优化之路
查看>>