iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么从零开发一个node命令行工具
  • 389
分享到

怎么从零开发一个node命令行工具

2024-04-02 19:04:59 389人浏览 泡泡鱼
摘要

本篇内容介绍了“怎么从零开发一个node命令行工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是命令

本篇内容介绍了“怎么从零开发一个node命令行工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

什么是命令行工具?

命令行工具(Cmmand Line Interface)简称cli,顾名思义就是在命令行终端中使用的工具。我们常用的 git 、npm、vim 等都是 cli 工具,比如我们可以通过 git clone 等命令简单把远程代码复制到本地。

为什么要用cli工具?

和 cli 相对的是图形用户界面(gui),windows 环境中几乎都是 gui 工具,而 linux 环境中则几乎都是 cli 工具,因为两者用户不同,gui 侧重于易用,cli 则侧重于效率。对于熟悉 gui 和集成开发环境(IDE)的程序员,这似乎很难理解。毕竟用鼠标点点拽拽,不是更方便么?

很遗憾,答案是否定的。gui对于某些简单操作,可能更快、更方便。比如移动文件、阅读邮件或写Word文档。但如果你依赖 gui 完成全部工作,你将会错过环境的某些能力,比如使常见任务自动化,或是利用各种工具的全部功能。并且,你也无法将工具组合,创建出定制的宏工具。gui 的好处是所见即所得(what you see is what you get)。缺点是所见即全部所得(what you see is all you get)。

作为注重实效的程序员,你不断的想要执行特别的操作(gui 可能不支持的操作)。当你想要快速地组合一些命令,以完成一次查询或某种其他的任务时,cli 要更为合适。比如:查看上周哪些js文件没有改动过:

# cli:  find . -name '*.js' -mtime +7 -print  # gui:  1.点击并转到"查找文件",点击"文件名"字段,敲入"*.js",选择"修改日期"选项卡;  2.然后选择"介于".点击"开始日期",敲入项目开始的日期。  3.点击"结束日期",敲入1周以前的日期(确保手边有日历),点击"开始查找";

如何开发一个 cli 工具?

基本上,使用任何成熟的语言都可以开发 cli 工具,作为一个前端小白,还是 javascript 比较顺手,因此我们选用 node 作为开发语言。

创建一个项目

# 1.创建一个目录:  mkdir kid-cli && cd kid-cli  # 2.因为最终我们要把cli发布到npm上,所以需要初始化一个程序包:   npm init  # 3.创建一个index.js文件  touch index.js  # 4.打开编辑器(vscode)  code  .

安装 code 命令,运行 VS code 并打开命令面板( ⇧⌘P ),然后输入 shell command 找到: Install 'code' command in PATH 就行了。

打开index.js文件,添加一段测试代码:

#!/usr/bin/env node  console.log('hello world!’)

终端运行 node 程序,需要先输入 node 命令,比如

node index.js

可以正确输出 hello world!,代码顶部的 #!/usr/bin/env node是告诉终端,这个文件要使用 node 去执行。

创建一个命令

一般 cli都有一个特定的命令,比如 git,刚才使用的 code 等,我们也需要设置一个命令,就叫 kid 吧!如何让终端识别这个命令呢?很简单,打开 package.JSON 文件,添加一个字段 bin,并且声明一个命令关键字和对应执行的文件:

# package.json  ......    "bin": {      "kid": "index.js"    },  ......

如果想声明多个命令,修改这个字段就好了。

然后我们测试一下,在终端中输入 kid,会提示:

zsh: command not found: kid

为什么会这样呢?回想一下,通常我们在使用一个 cli 工具时,都需要先安装它,比如 Vue-cli,使用前需要全局安装:

npm i vue-cli -g

而我们的 kid-cli 并没有发布到 npm 上,当然也没有安装过了,所以终端现在还不认识这个命令。通常我们想本地测试一个 npm 包,可以使用:npm link 这个命令,本地安装这个包,我们执行一下:

npm link

然后再执行

kid

命令,看正确输出 hello world! 了。

到此,一个简单的命令行工具就完成了,但是这个工具并没有任何卵用,别着急,我们来一点一点增强它的功能。

查看版本信息

首先是查看 cli 的版本信息,希望通过如下命令来查看版本信息:

kid -v

这里有两个问题

  1.  如何获取 -v 这参数?

  2.  如何获取版本信息?

在 node 程序中,通过 process.argv 可获取到命令的参数,以数组返回,修改 index.js,输出这个数组:

console.log(process.argv)

然后输入任意命令,比如:

kid -v -h -lalala

控制台会输出

[ '/Users/shaolong/.nvm/versions/node/v8.9.0/bin/node',    '/Users/shaolong/.nvm/versions/node/v8.9.0/bin/kid',    '-v',    '-h',    '-lalala' ]

这个数组的第三个参数就是我们想要的 -v。

第二个问题,版本信息一般是放在package.json 文件的 version 字段中, require 进来就好了,改造后的 index.js 代码如下:

#!/usr/bin/env node  const pkg = require('./package.json')  const command = process.argv[2]  switch (command) {      case '-v':      console.log(pkg.version)      break      default:      break  }

然后我们再执行kid -v,就可以输出版本号了。

初始化一个项目

接下来我们来实现一个最常见的功能,利用 cli 初始化一个项目。

整个流程大概是这样的:

  1.  cd 到一个你想新建项目的目录;

  2.  执行 kid init 命令,根据提示输入项目名称;

  3.  cli 通过 git 拉取模版项目代码,并拷贝到项目名称所在目录中;

为了实现这个流程,我们需要解决下面几个问题:

执行复杂的命令

上面的例子中,我们通过 process.argv 获取到了命令的参数,但是当一个命令有多个参数,或者像新建项目这种需要用户输入项目名称(我们称作“问答”)的命令时,一个简单的swith case 就显得捉襟见肘了。这里我们引用一个专门处理命令行交互的包:commander。

npm i commander --save

然后改造index.js

#!/usr/bin/env node  const program = require('commander')  program.version(require('./package.json').version)  program.parse(process.argv)

运行

kid -h

会输出

Usage: kid [options] [command]  Options:    -V, --version  output the version number    -h, --help     output usage infORMation

commander已经为我们创建好了帮助信息,以及两个参数 -V 和 -h,上面代码中的program.version 就是返回版本号,和之前的功能一致,program.parse 是将命令参数传入commander 管道中,一般放在***执行。

添加问答操作

接下来我们添加 kid init 的问答操作,这里有需要引入一个新的包:inquirer, 这个包可以通过简单配置让 cli 支持问答交互。

npm i inquirer --save

index.js:

#!/usr/bin/env node  const program = require('commander')  var inquirer = require('inquirer')  const initAction = () => {      inquirer.prompt([{          type: 'input',          message: '请输入项目名称:',          name: 'name'      }]).then(answers => {          console.log('项目名为:', answers.name)          console.log('正在拷贝项目,请稍等')      })  }  program.version(require('./package.json').version) program      .command('init')      .description('创建项目')      .action(initAction)  program.parse(process.argv)

program.command 可以定义一个命令,description 添加一个描述,在 --help 中展示,action 指定一个回调函数执行命令。inquirer.prompt 可以接收一组问答对象,type字段表示问答类型,name 指定答案的key,可以在 answers 里通过 name 拿到用户的输入,问答的类型有很多种,这里我们使用 input,让用户输入项目名称。

运行 kid init,然后会提示输入项目名称,输入后会打印出来。

运行 shell 脚本

熟悉 git 和 linux 的同学几句话便可以初始化一个项目:

git clone xxxxx.git --depth=1  mv xxxxx my-project  rm -rf ./my-project/.git  cd my-project  npm i

那么如何在 node 中执行 shell 脚本呢?只需要安装 shelljs 这个包就可以轻松搞定。

npm i shelljs --save

假定我们想克隆 GitHub 上 vue-admin-template 这个项目的代码,并自动安装依赖,改造index.js,在 initAction 函数中加上执行shell脚本的逻辑:

#!/usr/bin/env node  const program = require('commander')  const inquirer = require('inquirer')  const shell = require('shelljs')  const initAction = () => {      inquirer.prompt([{          type: 'input',          message: '请输入项目名称:',          name: 'name'      }]).then(answers => {          console.log('项目名为:', answers.name)          console.log('正在拷贝项目,请稍等')                const remote = 'https://github.com/PanJiaChen/vue-admin-template.git'          const curName = 'vue-admin-template'          const tarName = answers.name          shell.exec(`                  git clone ${remote} --depth=1                  mv ${curName} ${tarName}                  rm -rf ./${tarName}/.git                  cd ${tarName}                  npm i                `, (error, stdout, stderr) => {              if (error) {                  console.error(`exec error: ${error}`)                  return              }              console.log(`${stdout}`)              console.log(`${stderr}`)          });      })  }  program.version(require('./package.json').version)  program      .command('init')      .description('创建项目')      .action(initAction)  program.parse(process.argv)

shell.exec 可以帮助我们执行一段脚本,在回调函数中可以输出脚本执行的结果。

测试一下我们初始化功能:

cd ..  kid init  # 输入一个项目名称

可以看到,cli已经自动从github上拉取vue-admin-template的代码,放在指定目录,并帮我们自动安装了依赖。

“怎么从零开发一个node命令行工具”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 怎么从零开发一个node命令行工具

本文链接: https://www.lsjlt.com/news/85476.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么从零开发一个node命令行工具
    本篇内容介绍了“怎么从零开发一个node命令行工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是命令...
    99+
    2024-04-02
  • 怎么使用node开发一个mycli命令行工具
    这篇文章主要介绍了怎么使用node开发一个mycli命令行工具的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用node开发一个mycli命令行工具文章都会有所收获,下面我们一起来看看吧。初始化首先要确保电...
    99+
    2023-07-02
  • 如何使用node开发一个命令行压缩工具
    本篇内容主要讲解“如何使用node开发一个命令行压缩工具”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用node开发一个命令行压缩工具”吧!对比来跟 Co...
    99+
    2024-04-02
  • node如何通过npm写一个cli命令行工具
    这篇文章给大家分享的是有关node如何通过npm写一个cli命令行工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。怎么做一个npm命令行插件。注册npm账户发布npm插件,首先...
    99+
    2024-04-02
  • 怎么开发一个node切换源小工具
    这篇文章主要介绍“怎么开发一个node切换源小工具”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么开发一个node切换源小工具”文章能帮助大家解决问题。思路1,调用命令 设置源npm c...
    99+
    2023-07-05
  • 怎么使用Node.js写一个命令行工具
    这篇文章主要介绍“怎么使用Node.js写一个命令行工具”,在日常操作中,相信很多人在怎么使用Node.js写一个命令行工具问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Node.js写一个命令行工具...
    99+
    2023-06-17
  • 使用Rust开发命令行工具
    生成二进制文件,将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的API 使用该api[2] 如请求 api.openweathermap.org/da...
    99+
    2023-08-30
    后端
  • Linux中怎么用Node.js写一个命令行工具
    本篇内容介绍了“Linux中怎么用Node.js写一个命令行工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2022-12-02
    linux node.js
  • 如何使用node开发并发布一个cli工具
    这篇文章主要为大家展示了“如何使用node开发并发布一个cli工具”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何使用node开发并发布一个cli工具”这篇文...
    99+
    2024-04-02
  • 如何用Plumbum开发Python命令行工具
    如何用Plumbum开发Python命令行工具,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。主要介绍如何使用 Plumbum CLI 工具包来开发 Python 命令行应用程序...
    99+
    2023-06-17
  • Node.js中怎么构建一个交互式命令行工具
    这期内容当中小编将会给大家带来有关Node.js中怎么构建一个交互式命令行工具,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。开始首先,创建一个新的 npm&nb...
    99+
    2024-04-02
  • python开发简单的命令行工具简介
    目录介绍python标准库sys模块命令行工具概念基础示例使用介绍可选参数设置必选参数设置列表参数传入设置互斥参数默认参数设置介绍 Python模块argparse,这是一个命令行选...
    99+
    2023-02-01
    python开发命令行工具 python制作命令行工具 Pyth编写命令行工具
  • 如何使用Node.js写一个命令行工具
    这篇文章给大家分享的是有关如何使用Node.js写一个命令行工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:操作系统需要为Linux1. 目标在命令行输入自己写的命令...
    99+
    2024-04-02
  • 手把手带你开发一个node切换源小工具
    node怎么切换源?下面本篇文章带大家手搓一个node切换源小工具,希望对大家有所帮助!嗨嗨嗨,又到了写轮子环节了,为什么要写这个东西呢?应为npm自带的源下载东西灰常慢目前已经有一款工具了nrm 也是做切换源的 例如tabao源,腾讯源,...
    99+
    2023-05-14
    前端 JavaScript Node.js
  • Linux中如何用Node.js写一个命令行工具
    本文小编为大家详细介绍“Linux中如何用Node.js写一个命令行工具”,内容详细,步骤清晰,细节处理妥当,希望这篇“Linux中如何用Node.js写一个命令行工具”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2023-05-25
    linux node.js
  • 怎么使用命令行sxstrace.exe工具
    今天小编给大家分享一下怎么使用命令行sxstrace.exe工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用命令行sx...
    99+
    2023-07-01
  • Linux命令行工具exa怎么用
    小编给大家分享一下Linux命令行工具exa怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!exa 命令简介exa 是一个命令行工具,可以列出指定路径(如未指...
    99+
    2023-06-27
  • Python命令行工具clint怎么用
    这期内容当中小编将会给大家带来有关Python命令行工具clint怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Clint 是一个包含了用于开发命令行应用的工具集合模块。它支持高亮,但是在会话为 T...
    99+
    2023-06-02
  • Node.js怎么实现命令行工具
    这篇“Node.js怎么实现命令行工具”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Node.js怎么实现命令行工具”文章吧...
    99+
    2023-07-04
  • IPython8.0命令行交互工具怎么用
    这篇文章给大家分享的是有关IPython8.0命令行交互工具怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言:IPython 是 Python 的原生交互式 shell 的增强版,可以完成许多不同寻常的任...
    99+
    2023-06-26
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作