对
bin/macaw.js 做一些改动。
const program = require('commander')program.version('1.0.0')
.usage('<command> [项目名称]')
.command('init', '创建新项目')
.parse(process.argv)
在bin目录下创建一个
init 命令关联的执行文件
touch ./bin/macaw-init.js添加如下代码
#!/usr/bin/env nodeconst program = require('commander')
program.usage('<project-name>').parse(process.argv)
// 根据输入,获取项目名称
let projectName = program.args[0]
if (!projectName) { // project-name 必填
// 相当于执行命令的--help选项,显示help信息,这是commander内置的一个命令选项
program.help()
return
}
go()
function go () {
// 预留,处理子命令
}
注意第一行
#!/usr/bin/env node 是干嘛的,有个关键词叫Shebang,不了解的可以去搜搜看
project-name 是必填参数,不过,我想对
project-name 进行一些自动化的处理。当前目录为空,如果当前目录的名称和
project-name 一样,则直接在当前目录下创建工程,否则,在当前目录下创建以
project-name 作为名称的目录作为工程的根目录当前目录不为空,如果目录中不存在与
project-name 同名的目录,则创建以
project-name 作为名称的目录作为工程的根目录,否则提示项目已经存在,结束命令执行。根据以上设定,再对执行文件做一些完善
#!/usr/bin/env nodeconst program = require('commander')
const path = require('path')
const fs = require('fs')
const glob = require('glob') // npm i glob -D
program.usage('<project-name>')
// 根据输入,获取项目名称
let projectName = program.args[0]
if (!projectName) { // project-name 必填
// 相当于执行命令的--help选项,显示help信息,这是commander内置的一个命令选项
program.help()
return
}
const list = glob.sync('*') // 遍历当前目录
let rootName = path.basename(process.cwd())
if (list.length) { // 如果当前目录不为空
if (list.filter(name => {
const fileName = path.resolve(process.cwd(), path.join('.', name))
const isDir = fs.stat(fileName).isDirectory()
return name.indexOf(projectName) !== -1 && isDir









