npm 开源模块,如何配置属于本模块的命令集,全局、局部安装可以使用该命令

本文主要是介绍npm 开源模块,如何配置属于本模块的命令集,全局、局部安装可以使用该命令,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实要配置属于本模块专属命令并不复杂,只需在 package.json 里配置 bin 属性就可以了,下面我们通过一个列子来说明

// package.json"bin": {"tracelib": "./bin/tracelib.js"},
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const package = require('../package.json');
const { tracelib } = require('../dist/tracelib.js');// 输出数据
function outputData(result, outputPath) {if (outputPath) {fs.writeFile(path.resolve(process.cwd(), outputPath), JSON.stringify(result), 'utf-8', function(error) {console.log('写入成功');});} else {console.log(result);}
}function run(argv) {if (argv[0] === '-v' || argv[0] === '--version') {console.log('  version is ' + package.version);} else if (argv[0] === '-h' || argv[0] === '--help') {console.log('  usage:\n');console.log('  -v --version                                 [show version]');console.log('  [logPath][getSummary][outputPath?]           Fetch total time-durations of scripting, rendering, painting from tracelogs.');console.log('  [logPath][getWarningCounts][outputPath?]     Fetch amount of forced synchronous layouts and styles as well as long recurring handlers.');console.log('  [logPath][getFPS][outputPath?]               Fetch frames per second.');console.log('  [logPath][getMemoryCounters][outputPath?]    Fetch data for JS Heap, Documents, Nodes, Listeners and GPU Memory from tracelogs.');console.log('  [logPath][getDetailStats][outputPath?]       Fetch data (timestamp and values) of scripting, rendering, painting from tracelogs.');} else if (argv.length >= 2) {const logData = require(path.resolve(process.cwd(), argv[0]));const type = argv[1];let result = '';switch (type) {case 'getSummary':result = tracelib.getSummary(logData);break;case 'getWarningCounts':result = tracelib.getWarningCounts(logData);break;case 'getFPS':result = tracelib.getFPS(logData);break;case 'getMemoryCounters':result = tracelib.getMemoryCounters(logData);break;case 'getDetailStats':result = tracelib.getDetailStats(logData);break;default:console.log(new Error('This method is not available yet.'));break;}outputData(result, argv[2]);}
}run(process.argv.slice(2));

这里是一个简单的一个封装命令的源码

其实就是一个简单的 cmd 命令参数的解析,process.argv值的处理

process 对象是一个全局变量,它提供当前 Node.js 进程的有关信息,以及控制当前 Node.js 进程。 因为是全局变量,所以无需使用 require()。

process.argv 属性返回一个数组,这个数组包含了启动Node.js进程时的命令行参数,

其中:

数组的第一个元素process.argv[0]——返回启动Node.js进程的可执行文件所在的绝对路径

第二个元素process.argv[1]——为当前执行的JavaScript文件路径

剩余的元素为其他命令行参数

node index.js param1 param2

这我们可以看到,从第二个参数后就是我们传的参数,以空格分开。

只要配置在 bin 属性后,通过命令安装后,就会在全局、局部 node_modules\bin 目录下生成对应环境的可执行文件。

这样就可以通过 bin 中的命令属性,按我们预定的规则执行代码了。

下面我们来演示一下刚才封装的命令,是否能正常执行

如果有不明白的可以具体参考下面的开源库

这是一个非常适用的库,主要功能是,根据 chrome 生成的 trace log 文件,通过模块封装的函数,输出具体的性能值,方便图表展示

tracelib-cjs: This library provides a set of models from the devtools-frontend code base in order to parse trace log files.Note: This is early development and not ready to be consumed yet!

如何发布自己封装的库到 npm 请参考

vue 如何开发封装自己的公共组件库,并发布到 npm 上

这篇关于npm 开源模块,如何配置属于本模块的命令集,全局、局部安装可以使用该命令的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945569

相关文章

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

MyBatis与其使用方法示例详解

《MyBatis与其使用方法示例详解》MyBatis是一个支持自定义SQL的持久层框架,通过XML文件实现SQL配置和数据映射,简化了JDBC代码的编写,本文给大家介绍MyBatis与其使用方法讲解,... 目录ORM缺优分析MyBATisMyBatis的工作流程MyBatis的基本使用环境准备MyBati

IDEA与JDK、Maven安装配置完整步骤解析

《IDEA与JDK、Maven安装配置完整步骤解析》:本文主要介绍如何安装和配置IDE(IntelliJIDEA),包括IDE的安装步骤、JDK的下载与配置、Maven的安装与配置,以及如何在I... 目录1. IDE安装步骤2.配置操作步骤3. JDK配置下载JDK配置JDK环境变量4. Maven配置下

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

使用Python实现表格字段智能去重

《使用Python实现表格字段智能去重》在数据分析和处理过程中,数据清洗是一个至关重要的步骤,其中字段去重是一个常见且关键的任务,下面我们看看如何使用Python进行表格字段智能去重吧... 目录一、引言二、数据重复问题的常见场景与影响三、python在数据清洗中的优势四、基于Python的表格字段智能去重

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

jdk21下载、安装详细教程(Windows、Linux、macOS)

《jdk21下载、安装详细教程(Windows、Linux、macOS)》本文介绍了OpenJDK21的下载地址和安装步骤,包括Windows、Linux和macOS平台,下载后解压并设置环境变量,最... 目录1、官网2、下载openjdk3、安装4、验证1、官网官网地址:OpenJDK下载地址:Ar

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://