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做的工作
把终端中命令、标记、参数等。传入曾经定义好的办法中。
写一个命令行须要什么
- 会用commander就行。次要是
program.command(..).option(..)
。这个太简略了。 - 有肯定node.js的根底。这点须要一些常识储备。
复原工作
在./projectCommand/packages/testCommand
下执行npm unlink