YSS

Write Less & Do More

通过node.js写一个自动化生成项目的工具

随着node.js生态越来越好,各种工具组件层出不穷。可以说极大的方便了我们的使用。

那么,现在,我们要做一个自动化生成项目的工具,我们应该如何做呢?

步骤

用户会按照这个方式来走:

  1. 用户安装并执行我们的命令行。
  2. 展示输入界面,让用户输入必要的数据。
  3. 生成整个项目。

方案

  1. 首先,我们需要构建一个项目模板。确定哪些是项目模板需要用户自定义的数据。
  2. 之后,我们需要有一个东西去让用户去输入这些可以自定义的数据。
  3. 最后,完善一个脚本命令,生成我们的项目。

实现

项目模板

项目模板,这个需要根据自己的实际情况去完善和生成自己需要的模板。

用户输入

node有一个Inquirer.js项目,可以自定义很多输入方式,从直接的文本到输入密码,甚至多选列表。

具体可以移步到:https://github.com/SBoudrias/Inquirer.js

命令行

通过package.json的bin配置,再加上npm install xx -g。我们就可以生成一个全局的命令行。

{
  "bin": {
  	"command": "./path/to/program"
  }
}

具体可以移步到:https://docs.npmjs.com/files/package.json#bin

项目生成

各种打包工具。特别是Gulp,然后通过Gulp的各种插件实现替换,删除等操作,实在是再适合不过了。

项目和命令行结合

一直在想,项目模板和命令行是不是应该完全放到两个代码仓库里。

因为放在一起会发现:

  1. 项目模板本身是需要调试的,不是一个纯粹的模板。
  2. 在项目拷贝的过程中哪些需要,哪些不需要,处理起来很麻烦。
  3. 脚本有自己的依赖库,但是项目模板又是不需要的,怎么处理就是个问题。

但是分开的话,切换项目也是一个非常麻烦的事情。

最后,做了折中就是通过分支模式去做,这个很类似github的gh-pages思路。

就是,master分支是项目模板存放的地方。script分支是脚本存放的地方。两者代码完全是两套,;)

最后

本文从构建一个自动化生成项目的工具开始,一点一点剖析我们要做一个自动化工具每一步的考量和具体要怎么做。

其实,其他类型的自动化工具(交互式命令行)原理是一致的。