使用node.js构建命令行工具

本篇文章给大家分享的内容是使用node.js构建命令行工具 ,有着一定的参考价值,有需要的朋友可以参考一下

工具说明

inquirer.js:一个封装了常用命令行交互的node.js模块,通过该模块可以很方便地构建一个新的命令行应用。

shell.js:跨平台的unix shell命令模块。

Node版本:由于inquirer.js的异步方法默认返回Promise,建议使用node.js>=8。

目标

工作中有大量项目上线前最后一步需要执行测试、编译、更新版本号、提交,甚至执行的命令都是一样,在这里我们通过命令行工具将这些步骤一键自动化,同时进行预检查,防止错漏。

准备

创建一个新的Node.js项目。

创建文件bin/my-cli.js,node.js项目通常会把cli入口放在bin目录下,其他模块放在lib目录下。

在bin/my-cli.js文件头部添加#!/usr/bin/env node。

添加  “bin”: {“my-cli”: “./bin/my-cli.js”},到package.json,声明我们要使用的命令。

项目根目录下执行npm link,创建一个全局命令my-cli。

稍微修改下my-cli.js,添加代码console.log(“I am a cli tool!”),然后打开控制台运行my-cli命令,如果看到控制台输出I am a cli tool!就表示成功。

安装依赖

首先安装主要依赖的两个模块(关于这两个模块的使用请参考官方文档)

npm install inquirer shelljs

构建发布流程自动化

接下来首先实现测试、更新版本号、构建、自动提交发布的自动化

const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));const { version } = await inquirer.prompt([  {    type: 'list',    name: 'version',    message: '版本号更新方式:',    choices: [      {        name: `v${semver.inc(pkg.version, 'patch')}: Fix Bugs / Patch`,        value: 'patch'      },      {        name: `v${semver.inc(pkg.version, 'minor')}: Release New Version`,        value: 'minor'      },    ]  }]);// 拉取最新版本shelljs.exec('git pull');// 运行测试shelljs.exec('npm test');//通过npm version更新版本号,但不自动添加git tag,而是在构建完成后由cli工具添加shelljs.exec(`npm version ${version} --no-git-tag-version`);// 构建shelljs.exec('npm run build');// 提交发布代码const nextVersion = semver.inc(pkg.version, version);shelljs.exec('git add . -A');shelljs.exec(`git commit -m "build: v${nextVersion}"`)shelljs.exec(`git tag -a v${nextVersion} -m "build: ${nextVersion}"`);shelljs.exec("git push")shelljs.exec("git push --tags");

登录后复制

添加新功能:配置检查

接下来给my-cli添加一个功能:

当检查到package.json的my-cli对象的check-baidu-id属性为true时,检查项目的config.json是否存在baidu-id属性

if (pkg['my-cli'] && pkg['my-cli']['check-baidu-id']) {  const configPath = path.join(process.cwd(), 'config.json');  if (!fs.existsSync(configPath)) {    shelljs.echo('找不到config.json');    shelljs.exit(1);  }  const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));  if (!config['baidu-id']) {    shelljs.echo('config.json缺少属性[baidu-id]');    shelljs.exit(1);  }

登录后复制

最后一步

这样一个简单的cli程序就实现完毕了,它自动化了构建发布流程,构建发布之前还进行了配置检查。

在实际项目中,为了提高程序的稳定性,还需要添加检查当前项目是否存在package.json,防止json解析出错、执行前确认等功能,具体见示例代码。

示例代码

地址:https://github.com/Aturan/node-cli-example

结语

虽然上述功能使用shell也可以实现,但代码编写就没那么方便快速,而且一旦碰到更复杂的问题,用shell实现就很麻烦,维护也是一个问题。

PS. 其实也可以用python,对于Ubuntu,系统自带Python是一个优势,在服务器不需要安装环境就可以直接使用,再加上Python也有Inquirer模块。

相关推荐:

实例详解node.js如何获取SQL Server数据库

Node.js模块系统

以上就是使用node.js构建命令行工具 的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2773827.html

(0)
上一篇 2025年3月8日 13:59:09
下一篇 2025年3月8日 13:59:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Vue.js提升必知的几点总结

    这次给大家带来Vue.js提升必知的几点总结,Vue.js提升的注意事项有哪些,下面就是实战案例,一起来看一下。 第一招:化繁为简的Watchers 场景还原: created(){ this.fetchPostList()},watch:…

    编程技术 2025年3月8日
    200
  • 在vuejs中使用v-show不起作用的原因有哪些

    这次给大家带来在vuejs中使用v-show不起作用的原因有哪些,在vuejs中使用v-show的注意事项有哪些,下面就是实战案例,一起来看一下。 1.官网概念描述 v-if 是’真正的’条件渲染,因为它会确保在切换…

    编程技术 2025年3月8日
    200
  • vue对storejs获取数据进行处理的步奏详解

    这次给大家带来vue对storejs获取数据进行处理的步奏详解,vue对storejs获取数据进行处理的注意事项有哪些,下面就是实战案例,一起来看一下。 具体代码如下所示: export default { data(){ return {…

    编程技术 2025年3月8日
    200
  • JS怎样扩展字符串拼接

    这次给大家带来JS怎样扩展字符串拼接,JS扩展字符串拼接的注意事项有哪些,下面就是实战案例,一起来看一下。 1、题外话,有关概念理解:String.prototype 属性表示 String原型对象。所有 String 的实例都继承自 St…

    编程技术 2025年3月8日
    200
  • JS如何实现随机切换微信号

    这次给大家带来JS如何实现随机切换微信号,JS实现随机切换微信号的注意事项有哪些,下面就是实战案例,一起来看一下。 js代码: arr_wx =new Array(“aaaa”,”bbbb”,”cccc”); var wx_index = …

    编程技术 2025年3月8日
    200
  • AngularJS怎么重新加载路由页面

    这次给大家带来AngularJS怎么重新加载路由页面,AngularJS重新加载路由页面的注意事项有哪些,下面就是实战案例,一起来看一下。 用angular做项目,会碰到需要点击菜单刷新当前页面,加载当前页面,但是同一个路由页面点击没反应;…

    编程技术 2025年3月8日
    200
  • vue.js底部导航栏的子路由不显示怎么处理

    这次给大家带来vue.js底部导航栏的子路由不显示怎么处理,处理vue.js底部导航栏子路由不显示的注意事项有哪些,下面就是实战案例,一起来看一下。 最近利用vue第三方UI MuseUI开发webapp,然后在导航栏这里出现了问题,我需要…

    编程技术 2025年3月8日
    200
  • Node.JS实现段点续传配置文件的分段下载

    这次给大家带来Node.JS实现段点续传配置文件的分段下载,Node.JS实现段点续传配置文件分段下载的注意事项有哪些,下面就是实战案例,一起来看一下。 Header标签 请求 Request Header: 下载 3744 以后的文件内容…

    编程技术 2025年3月8日
    200
  • vue.js中怎么导入css库

    这次给大家带来vue.js中怎么导入css库,vue.js中导入css库的注意事项有哪些,下面就是实战案例,一起来看一下。 1.安装以下模块,让webpack可以解析css文件 cnpm install style-loader –sav…

    编程技术 2025年3月8日
    200
  • Vue.js怎样实现图片可以随意拖动摆放

    相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章! 推荐阅读: 这次给大家带来Vue.js怎样实现图片可以随意拖动摆放,Vue.js实现图片可以随意拖动摆放的注意事项有哪些,下面就是实战案例,一起来看一下。 主要代码如…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论