likes
comments
collection
share

掌握这些npm包,开发命令行工具手到擒来!!!

作者站长头像
站长
· 阅读数 97

前言

  现在开发命令行工具基本上是每一个前端同学必会的技能,有些同学想自己开发一个命令行工具,但是却很苦恼不知道有哪些工具包可供选择,这篇文章为大家罗列了一些命令行工具可能会用到的包。

解析参数

commander

node.js命令行界面的完整解决方案。

Weekly Downloads: 11700w+

1.1e多次的下载量,很强大,每一个cli工具必不可少的,用法直接戳官网

minimist

轻量级命令行解析参数引擎

Weekly Downloads: 5690w+

// index.js
const argv = require('minimist')(process.argv.slice(2));
console.log('argv: ', argv);

// node index.js --name=sens
argv:  { _: [], name: 'sens' }

执行命令

exec

Process execution for humans(原文描述),这个包改进了child_process的一些方法,具体可以看这里

Weekly Downloads: 6700w+

const execa = require('execa');
const run = (bin, args, opts ={}) => execa(bin, args, { stdio: 'inherit', ...opts });

run('yarn', ['add', 'lodash', '-D']);

cross-spawn

NodeJSspawnspawnSync的跨平台解决方案。

Weekly Downloads: 6600w+

const spawn = require('cross-spawn');
const child = spawn('npm', ['list''-g''-depth''0'], { stdio'inherit' });

child_process

NodeJs自带模块,用来同步或者异步的创建子进程,在可以执行一些命令,更多用法请查看官网

const {exec} = require('child_process');

exec('yarn add dotenv -D', {cwd: process.cwd()}, (error, stdout, stderr) => {
  console.log('stderr: ', stderr);
  console.log('stdout: ', stdout);
  console.log('error: ', error);
})

shelljs

js执行shell命令,shelljs提供了很多像Unixshell命令,比如echowhichexecrmcp等,详细信息查看官网

Weekly Downloads: 780w+

const shell = require('shelljs');

shell.echo('hello sens');
console.log(shell.which('yarn').stdout);
shell.exec('yarn add lodash -D');

彩色文字

chalk

Terminal string styling done right(原文解释)。

Chalk 5 是ESM规范,如果你想用Commonjs规范,可以降到Chalk 4

Weekly Downloads: 24500w+

const chalk=require('chalk');
console.log(chalk.blue('Hello world!'));

掌握这些npm包,开发命令行工具手到擒来!!!

kolorist

比chalk更轻量

Weekly Downloads: 34w+

const {red} = require('kolorist');
console.log(red('something failed'))

掌握这些npm包,开发命令行工具手到擒来!!!

命令行交互

inquirer

一组常见的交互式命令行用户界面。

Weekly Downloads: 2770w+

prompts

轻便、美观、用户友好的交互式提示。

掌握这些npm包,开发命令行工具手到擒来!!!

Weekly Downloads: 2111W+

dotenv

将项目的.env环境变量设置到process.env里面,详细文档请看官网

Weekly Downloads: 3290W+

// .env
NAME=sens
HELLO=hello
// index.js
require('dotenv').config();

console.log('process.env.HELLO', process.env.HELLO); // hello
console.log('process.env.NAME', process.env.NAME); // sens

dotenv-expand

基于dotenv之上,增加变量扩展,,详细文档请看官网

Weekly Downloads: 1150W+

// .env
NAME=sens
HELLO=${NAME}
// index.js
const dotenvExpand = require('dotenv-expand')
const env = require('dotenv').config();
dotenvExpand.expand(env)

console.log('process.env.NAME', process.env.NAME); // sens
console.log('process.env.HELLO', process.env.HELLO); // sens

read-pkg

在( node 环境)ES module 下获取 packjson 文件内容,提供更友好的错误提示和规范化 packjson 数据。

Weekly Downloads: 3890W+

import {readPackage} from 'read-pkg';

const getPkg = async () => {
  console.log(await readPackage());
}
getPkg();

open

可以跨平台的打开URL、文件、可执行文件等内容。

Weekly Downloads: 3029W+

使用场景:启动服务器之后,帮用户打开对应的网页。

portfinder

获取本机可用的端口号,详细文档请看官网

Weekly Downloads: 904W+

const portfinder = require('portfinder');
portfinder.basePort = 8080;
portfinder.getPortPromise()
.then(port => {
  // 如果8080端口被占用,会自动检测 basePort + 1的端口号
  // 重复上述步骤,直到返回可用的端口号
})

使用场景:在开发cli工具的时候,启动了一个端口,假如端口被占用,可以自动的+1,再次启动服务器。

ora

可以在终端实现loading效果。

Weekly Downloads: 1750W+

掌握这些npm包,开发命令行工具手到擒来!!!

import ora from 'ora';
const spinner = ora('Loading unicorns').start();
setTimeout(() => {
	spinner.color = 'yellow';
	spinner.text = 'Loading rainbows';
}, 1000);

figlet

JavaScript 中贯彻 FIGFont 规范。可以在浏览器和 Node.js 中使用。比如可以在终端输出符合规范的文字

Weekly Downloads: 69W+

const figlet = require('figlet');
const {green} = require('kolorist');

function logo() {
  console.log(green(figlet.textSync('hello', {
    horizontalLayout: 'full',
  })))
  console.log();
}

logo();

掌握这些npm包,开发命令行工具手到擒来!!!

使用场景:创建完项目之后可以将自己cli的名字输出到终端(命令行输入yarn create doves即可体验)。

npm-run-all

并行或顺序运行多个 npm 脚本的 CLI 工具,特点是跨平台,兼容性好;简化命令。

Weekly Downloads: 317W+

npm run clean && npm run build:css && npm run build:js && npm run build:html
// 使用npm-run-all
npm-run-all clean build:*

总结

  可以看到,chalk全场最佳,weekly downloads达到了惊人的2.45亿,其次就是commander,1.17亿。另外平时开发的时候,我们可以优先选择下载量多的,迭代速度快的npm包,这样才能保证项目的稳定性。

转载自:https://juejin.cn/post/7210005376654082109
评论
请登录