overview

本示例能够创立一个目录、二个文件。

init project

mkdir projectCommandcd projectCommandlerna initlerna create testCommandlerna add commander

defined

批改./projectCommand/packages/testCommand/package.json

{    ...    "bin": {        ...        "demo": "./bin/initProject.js",    }}

init cli

在中创立./projectCommand/packages/testCommand/bin/initProject.js。编辑内容如下:

#!/usr/bin/env nodeconst program = require('commander')const fs = require('fs')console.log('begin')<!-- 定义命令 start -->program    .command('create <project-name>')    .description('create a new project')    .option('-f, --file <file>', 'name of main file')    .option('-m, --minor', 'create minor file')    .action((projectName, options) => {        console.log('projectName', projectName)        console.log('options', options)        fs.mkdir(`./${projectName}`, (error) => {        if (error) {            console.log('我的项目曾经存在,不能再次创立。')        } else {            console.log('创立目录胜利')            fs.writeFile(`./${projectName}/${options.file}`, 'this is main file.', (err) => {                if (err) {                    console.log('创立主文件失败')                } else {                    console.log('创立主文件胜利')                }            })            if (options.minor) {                fs.writeFile(`./${projectName}/minor.md`, 'this is minor file.', (err) => {                    if (err) {                        console.log('创立主文件失败')                    } else {                        console.log('创立主文件胜利')                    }                })            }        }    })})<!-- 定义命令 end -->// 解析命令。即依据输出到终端的内容执行相应命令。program.parse(process.argv)

usage

在本包中应用命令

./projectCommand/packages/testCommand下执行npm link
再执行initProject create li -f main.js -m,则输入:

beginprojectName lioptions { file: 'main.js', minor: true }创立目录胜利创立主文件胜利创立主文件胜利

若执行initProject create li1 -f main.js,也会执行相应输入。

后记

commander做的工作

把终端中命令、标记、参数等。传入曾经定义好的办法中。

写一个命令行须要什么

  1. 会用commander就行。次要是program.command(..).option(..)。这个太简略了。
  2. 有肯定node.js的根底。这点须要一些常识储备。

复原工作

./projectCommand/packages/testCommand下执行npm unlink