开发Node CLI构建微信小程序脚手架的示例

2020-06-17 08:02:04易采站长站整理

.command("init [projectName]", "Init a project with default templete")
.parse(process.argv); // 解析命令参数

然后需要注意的是,

commander
支持
Git
风格的子命令处理,可以根据子命令自动引导到以特定格式命名的命令执行文件,文件名的格式是
[command]-[subcommand]
,例如:


modoo-script init => modoo-script-init
modoo-script build => modoo-script-build

所以为了实现

init
命令,可以直接在
bin
文件目录下添加
modoo-script-init.js


#!/usr/bin/env node

const { program } = require("commander");

program
.option("--name [name]", "项目名称")
.option("--description [description]", "项目介绍")
.option("--framework", "脚手架框架")
.parse(process.argv);

const args = program.args;
// 获取命令参数
const { name, description, framework } = program;

const projectName = args[0] || name;

......

用户交互

获取了命令参数后,根据参数转到用户交互界面,这里使用的是

inquirer
来处理命令行交互, 用法很简单


const inquirer = require('inquirer')

if (typeof conf.description !== 'string') {
prompts.push({
type: 'input',
name: 'description',
message: '请输入项目介绍!'
})
}

......

inquirer.prompt(prompts).then(answers => {
// 整合配置
this.conf = Object.assign(this.conf, answers);
})

远程模块

这里较为折腾,一开始说了,我把模版作为

npm包
,具体查找,下载的过程如下

npm search
查找相应的模版
npm 包

在用户选择框架后对应所需的包,获取它的详细信息,主要是
tarball

用户输入完后,下载
tarball
到项目目录,并修改
.json
文件配置

部分代码如图所示


// 一 npm search 查找相应的模版 npm 包
const { execSync } = require("child_process");

module.exports = () => {
let list = [];
try {
const listJSON = execSync(
"npm search --json --registry http://registry.npmjs.org/ @modoo/modoo-template"