【送书活动十期】从零开始node.js制作CLI工具

这篇博客的由来是源于工作中一个java项目的配置项是加密后的私钥,私钥是由其他项目中调用web3生成随机账号得到的,而加密方法只是简单在java项目中执行代码得到。这便导致两步操作有点割裂,需要有一个脚本来完成生成私钥和加密私钥,减少重复操作且方便不同服务器执行。

在这里插入图片描述


【好看的灵魂千篇一律,有趣的鲲志一百六七!】- 可查看详情~~
作者:鲲志说 (公众号、B站同名,视频号:鲲志说996)
后端研发:java、go,前电商、现web3
博客专家:阿里云社区、CSDN博客专家
超级个体:COC杭州开发者社区主理人
AI爱好者: AI电影共创社杭州核心成员
科技博主:极星会 星辉大使

目录

  • CLI工具是什么
  • 操作步骤
    • 创建项目
    • 创建可执行文件
    • package.json中设置bin入口文件
    • 运行npm link
    • 发布到npm
      • 登录npm
    • 通过命令安装CLI工具
  • 至此,艺术已成
  • 书籍推荐
    • 书籍名称:《Ubuntu Linux运维从零开始学》
    • 内容介绍
    • 适合人群
    • 如何领书
      • 方式一 博客送书
      • 方式二 公众号送书
      • 方式三 粉丝群送书
    • 自主购买
  • 最后

由于是将java代码中的逻辑搬到了js上,所以考虑到了制作CLI工具

CLI工具是什么

CLI 工具,即命令行界面(Command-Line Interface)工具,是一种允许用户通过文本命令与计算机程序或操作系统交互的界面。CLI 工具通常在终端或控制台窗口中运行,用户输入文本命令来执行特定的操作或获取信息。

简单理解是一种通过命令行来在运行一些代码,来实现某些功能的工具或者应用。可以减少开发中的一些低级重复劳动,或者规范开发工作流,提高开发效率。


操作步骤

创建项目

  • 创建一个新的项目目录
mkdir generateEthKeys
  • 进入项目目录后,初始化npm
npm init -y

创建可执行文件

可执行文件即真正的代码逻辑文件,如我是加解密的代码,则创建了generateEthKeys.js文件,代码内容不需要解释了,注释应该很清晰了。

#!/usr/bin/env node

console.log('Hello, CLI world!');

const CryptoJS = require('crypto-js');
const Web3 = require('web3');
const web3 = new Web3(Web3.givenProvider || 'http://localhost:8545');

// AES 加密密钥,长度必须为16字节
const AES_KEY = 'kunzhiSayNodeCLI';

// 生成随机私钥
const account = web3.eth.accounts.create();
const privateKey = account.privateKey;

// 加密
const encryptedPrivateKey = encrypt(privateKey, AES_KEY);
console.log('Encrypted Private Key:', encryptedPrivateKey);

// 解密
const decryptedPrivateKey = decrypt(encryptedPrivateKey, AES_KEY);
console.log('Decrypted Private Key:', decryptedPrivateKey);

// 获取地址
const address = account.address;
console.log('Address:', address);

function encrypt(data, key) {
    const keyBytes = CryptoJS.enc.Utf8.parse(key);
    const dataBytes = CryptoJS.enc.Utf8.parse(data);
    const encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

function decrypt(data, key) {
    const keyBytes = CryptoJS.enc.Utf8.parse(key);
    const decrypted = CryptoJS.AES.decrypt(data, keyBytes, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

package.json中设置bin入口文件

{
  "name": "generateethkeys",
  "version": "1.0.0",
  "description": "",
  "main": "generateEthKeys.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bin": {
    "generateethkeys": "./generateEthKeys.js"
  },
  "dependencies": {
    "commander": "^12.1.0"
  }
}

运行npm link

希望全局安装这个CLI工具并在任何地方使用它,可以使用以下命令在本地测试:

npm link

在这里插入图片描述

发布到npm

npm publish

这一步操作操作即发布成功了,如下图
在这里插入图片描述

当然,这一步是需要确保我们已经注册并登录了npm,如果没有登录,就会出现下图问题,说明需要先登录,可以继续参考下面的操作
在这里插入图片描述

登录npm

npm adduser

执行完这一步命令后,会提示你依次输入Username、Password、Email和一次性登录密码
在这里插入图片描述

通过命令安装CLI工具

其他用户可以通过以下命令安装我们的CLI工具

npm install -g generateEthKeys

至此,艺术已成

登录npm查看

在这里插入图片描述


书籍推荐

《Ubuntu Linux运维从零开始学》详解Ubuntu安装、文件系统基础、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、文件服务器Samba、FTP文件传输服务、NFS网络文件服务、NTP服务的搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务搭建、Tomcat服务搭建与应用、LAMP搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。

书籍名称:《Ubuntu Linux运维从零开始学》

在这里插入图片描述

内容介绍

Ubuntu Linux是目前最流行的Linux操作系统之一。Ubuntu的目标在于为一般用户提供一个最新的、相当稳定的、主要由自由软件构建而成的操作系统。Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。《Ubuntu Linux运维从零开始学》详解Ubuntu Server 22.04运维基础和常用工具,配套PPT课件和作者QQ群答疑服务。
全书共分24章,内容包括了解Linux、安装Ubuntu、文件系统基础知识、文件和目录管理、用户和权限管理、系统启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理、文本编辑器、网络管理、系统和网络安全、Samba文件服务器、FTP文件传输服务、NFS网络文件服务、NTP服务搭建与应用、DNS域名服务、DHCP动态主机配置协议、Nginx服务的搭建、Tomcat服务搭建与应用、LAMP的搭建、Jenkins服务搭建与应用、Zabbix监控系统搭建与应用、Ansible配置与应用。

适合人群

  • 适合Ubuntu Linux初学者、Ubuntu运维人员、Ubuntu应用开发人员。
  • 本书也适合作为高等院校或高职高专Linux课程的教材。

如何领书

————————————————
⚠️:三种送书方式可以重复叠加获奖🏆

方式一 博客送书

本篇文章送书 🔥1本 评论区抽1位小伙伴送书
📆 活动时间:截止到 2024-07-22 18:00:00
🎁 抽奖方式:利用网络公开的在线抽奖工具进行抽奖
💡 参与方式:关注、点赞、收藏 + 任意大于10个字的评论

方式二 公众号送书

关注公众号,参与抽奖,中奖即可送书 🔥2本
📆 活动时间:达到100 人参与时自动开奖,2024-07-22 18:00:00 截止
🎁 抽奖方式:利用抽奖小程序进行抽奖
💡 参与方式:关注微信公众号《鲲志说》,发送:我要学Ubuntu ,即可参与
或微信扫描下方图片
在这里插入图片描述

方式三 粉丝群送书

具体参与方式可➕kunzhi96或扫描下方二维码,体验更多白嫖书籍的玩法
请添加图片描述

自主购买

小伙伴也可以访问链接进行自主购买哦~
直达京东购买链接🔗:《Ubuntu Linux运维从零开始学》


最后

  • 好看的灵魂千篇一律,有趣的鲲志一百六七!
  • 如果觉得文章还不错的话,可以点赞+收藏+关注 支持一下,鲲志的主页 还有很多有趣的文章,欢迎小伙伴们前去点评
  • 如果有什么需要改进的地方还请大佬指出❌
  • 欢迎学习交流|商务合作|共同进步!
  • ❤️ kunzhi96 公众号【鲲志说】

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/803297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue使用audio 音频实现播放与关闭(可用于收到消息给提示音效)

这次项目中因为对接了即时通讯 IM,有个需求就是收到消息需要有个提示音效,所以这里就想到了用HTML5 提供的Audio 标签,用起来也是很方便,首先让产品给你个提示音效,然后你放在项目中,使用Audio 标签&#x…

【深度学习教程】

文章目录 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 李宏…

如何通过网络快速搜寻到自己的STM32设备

目录 一、问题概述 二、解决思路 三、代码实现 1.创建任务 2.UDP广播接收 一、问题概述 以前一直用RS232串口修改设备配置信息,但是现场施工人员的232线太细,经常容易断掉,这次准备用网口去修改,遇到了一个问题,…

allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘

踩坑记录 问题描述: 接口自动化测试时出现报错,报错文件是allure_pytest库 问题分析: 自动化测试框架是比较成熟的代码,报错也不是自己写的文件,而是第三方库,首先推测是allure_pytest和某些库有版本不兼…

新手教学系列——简单的服务配置项集中管理

前言 在开发和运维过程中,配置管理是一个非常重要但经常被忽视的环节。常用的配置文件格式包括env、ini和yaml等,它们非常适合模块级别的系统配置,尤其是一些敏感信息的配置,例如数据库连接字符串和密码等。但是,对于…

【文心智能体】前几天百度热搜有一条非常有趣的话题《00后疯感工牌》,看看如何通过低代码工作流方式实现图片显示

00后疯感工牌体验:https://mbd.baidu.com/ma/s/6yA90qtM 目录 前言比赛推荐工作流创建工作流入口创建工作流界面工作流界面HTTP工具卡点地方 总结推荐文章 前言 前几天百度热搜有一条非常有有趣《00后疯感工牌》。 想着通过文心智能体去一键生成00后疯感工牌是不是…

大语言模型在病理AI领域的应用·1|24-07-17·文献速递

小罗碎碎念 今日文献主题:大语言模型技术在病理组学中的应用 这次从厦门开会回来以后,一直在思考大语言模型在病理AI中的一个应用场景,为了辅助自己得出一个科学的结论,我搜集了最新发表的30篇与之相关的文献,用6期推文…

【解决】多个网卡导致nacos注册的服务ip有误问题

解决办法 在本地idea中启动的时候添加启动配置: 方法一 -Dspring.cloud.inetutils.preferred-networks你自己网卡的ip 方法二 -Dspring.cloud.nacos.discovery.ip你自己网卡的ip

封装网络请求 鸿蒙APP HarmonyOS ArkTS

一、效果展示 通过在页面直接调用 userLogin(params) 方法,获取登录令牌 二、申请网络权限 访问网络时候首先需要申请网络权限,需要修改 src/main 目录下的 module.json5 文件,加入 requestPermissions 属性,详见官方文档 【声明权…

陪玩系统小程序模式APP小程序H5系统搭建开发

随着移动互联网的营及和游戏行业的蓬轨发展,陪玩服务应远而生并迅速唱起,陪玩系统小程序作为连接游戏玩家与陪玩师的桥梁,其模式系统的搭建与开发是得尤为重要,本文将洋细凰述陪玩系统小程宗模式系统的搭建开发流程,包…

PCIe驱动开发(3)— 驱动设备文件的创建与操作

PCIe驱动开发(3)— 驱动设备文件的创建与操作 一、前言 在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/dev/xxx” (xxx 是具体的驱动文件名字)的文件进行相应的操作即…

C语言------指针讲解(2)

目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 一、数组名的理解 通过学习,我们知道:数组名和数组首元素的地址打印出来的结果一模一样,数组…

信息安全CISSP认证重点学什么?学习后能掌握哪些安全技能?

引言: 想要在信息安全领域取得突破?那么CISSP认证是您必不可少的一步!本文将为您介绍CISSP认证的重点学习内容以及学习后可以掌握的安全技能,助您更好地了解并准备这一全球认可的信息安全证书。 随着信息安全领域的不断发展&…

【教学类-67-02】20240716毛毛虫ABB排序

背景需求: 【教学类-67-01】20240715毛毛虫AB排序-CSDN博客文章浏览阅读584次,点赞16次,收藏6次。【教学类-67-01】20240715毛毛虫AB排序https://blog.csdn.net/reasonsummer/article/details/140443310 在AB排序基础上,继续制作…

2024年带你轻松掌握最火10款项目管理软件:解决企业项目管理难题的利器

本文向您推荐10款卓越非凡的项目管理软件!它们能有效地助您梳理思绪,极大提高工作效率,使您即使身处繁忙之中仍能保持井然有序。这十款工具各具特色,从简洁明了的任务清单到复杂精密的项目追踪需求,满足各类用户群体的…

Python中的数据结构:五彩斑斓的糖果盒

在Python编程的世界里,数据结构就像是一个个五彩斑斓的糖果盒,每一种糖果都有其独特的味道和形状。这些多姿多彩,形状和味道各异的糖果盒子包括了:List(列表)、Tuple(元组)、Diction…

【Java开发实训】day05——数组常见算法

目录 一、数组翻转 1.1示例代码 1.2适用场景 二、冒泡排序 2.1示例代码 2.2适用场景 三、二分查找 3.1示例代码 3.2适用场景 🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。 💡本文由Filotimo…

【软件建模与设计】-04-软件设计和体系结构概念

目录 1、类与对象 2、信息隐藏 2.1、示例 3、继承和泛化/特化 4、并发处理 4.1、并发对象间的协作 5、设计模式 6、软件体系结构和构件 7、软件质量属性 1、类与对象 一个对象是现实世界中物理的或概念的实体。 一个对象盖了数据(data)以及作用于数据之上的过程(pro…

Sentinel规则持久化Push模式两种实现方式

文章目录 sentinel持久化push推模式微服务端的实现具体实现源码分析读数据源写数据源的实现 微服务端解析读数据源流程 修改源码的实现官方demo修改源码实现配置类flowauthoritydegreadparamsystemgateway修改源码 测试补充 前置知识 pull模式 sentinel持久化push推模式 pull拉…

liunx面试题目

如何看当前Linux系统有几颗物理CPU和每颗CPU的核数? 查看物理cup: cat /proc/cpuinfo|grep -c ‘physical id’ 查看每颗cup核数 cat /proc/cpuinfo|grep -c ‘processor’ 若希望自动实现软件包的更新,可以使用yum-cron并启动该服务 yum -y …