原标题:使用Node.js制作模板类脚手架的一般流程
前言
当我们搭建SPA或者Node.js项目时,一般会基于现成的脚手架,这样能带来不少好处:
省去繁琐的配置和搭建过程,可以更关注业务编码
目录结构,文件、变量命名等社区最佳实践已包含其中
很多框架/库都提供了脚手架,如vue-cli、angular-cli、express-generator、egg-init等。一般原理是用户通过命令行指定目录、项目名称等->程序解析命令行,下载相应模板->做一些模板变量替换->在本地生成。 我们就以从github拉取一种流行react脚手架为例,来了解一般的流程,实现如下命令:
Note:
• 一般表示必选,[options]表示可选
• list|ls, | 表示别名
• 使用 -- 单词或 - 单字来指定option
准备工作
初始化项目$ mkdir fetch-react-template && cd fetch-react-template $ npm init -y安装依赖$ npm i commander inquirer -S $ npm i chalk cli-table ora -S $ npm i download-git-repo request -S
Note:
• 命令行解析:Commander.js(类似的还有Yargs、minimist等)
• 命令行交互:Inquirer.js
• 下载模板:download-git-repo(从GitHub/GitLab/Bitbucket等git仓库下载模板)
• spinner效果:ora(类似的有cli-spinners等)
• 文字着色效果:chalk(类似的还有colorjs、cli-color等,原理可参考这篇文章,试试在控制台输出node -p '"u001b[31m red u001b[39m"')
• 以table形式在终端显示数据:cli-table
• HTTP client:request
在package.json中添加命令入口。
{ "name": "fetch-react-template", "bin": { "frt": "./bin/frt.js" }, "dependencies": { "chalk": "^2.4.1", "cli-table": "^0.3.1", "commander": "^2.18.0", "download-git-repo": "^1.1.0", "inquirer": "^6.2.0", "ora": "^3.0.0", "request": "^2.88.0" } }
在入口文件加入代码。
#!/usr/bin/env node console.log('hello world');
然后执行 npm link 命令。
$ npm link
这样我们再执行 frt ,就不用输入路径了。
命令行解析
先实现比较的简单的list命令,修改frt.js文件。
Note:
• 调用version会将-v和--version添加到命令中,可以通过这些选项打印出版本号
• command定义list命令, alias定义命令别名ls
• action则是执行list命令时我们要做的事情,这边我们简单的通过关键字react boilerplate去查询github的开放接口
,然后在终端展示(Note: 本例子无实际意义)
命令行交互
再来实现init命令,我们通过刚才获取的list让用户去选择一个模板。Inquirer.js提供了用户输入、选择列表等交互功能。
下载模板、模板变量替换
我们可以把模板放在远程仓库上,或者可以像egg-init去远程下载一个gzip文件,然后本地解压、复制、替换变量。这边我们就简单地去拉取一个仓库代码。
交互优化
log一些信息
写在最后
完整示例(https://github.com/zzf03680147/fetch-react-template)
最终效果
自此我们便完成一个简单的模板类脚手架,然后可以publish,就不赘述了。返回搜狐,查看更多
责任编辑: