
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.5.4 解析CLI参数和路径
说起生成器,最经典的便是著名Web框架Rails的脚手架,它的用法如下。

rails g是固定的用于生成模型的命令,book是模型名称(俗称表名),name和coordinates都是字段名称,string是表中的数据类型。其中可变的只有表名和字段名称,所以只要将CLI中的内容解析出来,将rails换成gen命令即可,我们想要实现的调用方式如下。

修改gen.js代码,具体如下。

执行gen命令的结果如下。

下面我们来构造一个模型对象,代码如下。

执行以上代码,结果如下。

在以上代码中,data为数据参数,类似于1.5.3节中模板引擎里的renderString方法的第二个参数。将这个data作为参数,可以生成对应的代码。

有了数据参数,下面修改模板gen.tpl文件,代码如下。

以上代码将模板和CLI解析出来的数据进行了组装,生成的文件内容如下。

当然,这里是只是示意,具体要生成的代码仍需要按照实际功能来设计。我们来看一下完成上面功能的完整代码,如下。


这里我们会发现,每次执行时,生成的结果都没有在固定目录下,一旦用户切换了目录,这个功能就不可用了。下面我们对代码进行修改,不使用相对路径,而使用__dirname来确定模板位置,生成的结果需要写到process.cwd()对应的目录下。修改后的代码如下。


基于上述代码,在任意目录中输入gen命令,都会在当前目录下生成一个gen.xxx文件,和我们之前预设的结果一样。