主题
CLI 基础
快速入门
1. shebang
shebang 是 Unix 系统中用来指定脚本解释器的机制。
通过在脚本的第一行添加 #!/usr/bin/env node,可以确保脚本在正确的 Node.js 环境中运行。
js
#!/usr/bin/env node
console.log('hello world')2. bin
在 package.json 中,可以通过 bin 字段指定可执行文件。
json
{
"name": "my-cli",
"version": "1.0.0",
"bin": {
"my-cli": "src/index.js",
"joke": "src/joke.js"
}
}安装之后,会生成两个可执行的命令:
- my-cli
- joke
CLI 常用库
commander.js
commander.js 是一个用于构建命令行接口的库。
js
import { Command } from 'commander'
const program = new Command()
program
.version('0.0.1')
.description('An example CLI for managing tasks')
.option('-d, --debug', 'output extra debugging')
.command('add <task>', 'add a new task')
.command('remove <task>', 'remove a task')
.parse(process.argv)
if (program.debug) {
console.log(program.opts())
}chalk
chalk 是一个用于样式化终端字符串的库。
js
import chalk from 'chalk'
console.log(chalk.bgGreen('Hello world!'))chalk-animation
chalk-animation 是一个用于创建彩色动画文本的库。
js
import chalkAnimation from 'chalk-animation'
chalkAnimation.rainbow('Hello world!')inquirer
inquirer 是一个用于创建交互式命令行界面的库。
js
import inquirer from 'inquirer'
async function askName() {
const answers = await inquirer.prompt({
name: 'player_name',
type: 'input',
message: 'What is your name?',
default() {
return 'Player'
},
})
playerName = answers.player_name
}CLI 技巧
定义 npm scripts
package.json 中通过 scripts 字段定义脚本命令。
json
{
"scripts": {
"command": "modern command"
}
}传递参数
-- 是一个分隔符,用于将参数传递给脚本,而不是 npm 本身。
bash
# 将 --option 传递给脚本
npm run command -- --option
# 如果省略 --,参数可能会被 npm 解析
npm run command --option区别:
npm run command -- --option:--option会传递给command脚本。npm run command --option:--option会被 npm 解析,而不是传递给脚本。
