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

相关文章

IDEA中配置Tomcat全过程

《IDEA中配置Tomcat全过程》文章介绍了在IDEA中配置Tomcat的六步流程,包括添加服务器、配置部署选项、设置应用服务器及启动,并提及Maven依赖可能因约定大于配置导致问题,需检查依赖版本... 目录第一步第二步第三步第四步第五步第六步总结第一步选择这个方框第二步选择+号,找到Tomca

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹