NPM 制作命令行工具 - 入门案例

news2024/12/23 18:59:52

一、简介

  • 经常通过 npm 安装 vue-clicreate-react-app 之类的命令行工具,那么如何简单的制作一个命令行工具呢?只需要几步即可!

二、制作

  • 创建 npm 命令行工具文件夹(例如:dzm-cli

  • 初始化 dzm-cli,得到 package.json 配置文件。

    $ npm init -y
    
    {
      "name": "dzm-cli",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC"
    }
    
  • 根目录新建 index.js,添加测试代码

    #!/usr/bin/env node
    
    // 输出命令带的参数
    console.log(process.argv)
    
  • 可以本地测试执行下 index.js

    $ node index.js
    
    # 输出
    [
      '/Users/xxx/.nvm/versions/node/v16.20.0/bin/node',
      '/Users/xxx/Desktop/Project/dzm-cli/index.js'
    ]
    
    $ node index.js 参数1 参数2 参数3 ....
    
    # 输出
    [
      '/Users/xxx/.nvm/versions/node/v16.20.0/bin/node',
      '/Users/xxx/Desktop/Project/dzm-cli/index.js'
      '参数1',
      '参数2',
      '参数3'
    ]
    
  • 然后在 package.json 中添加 bin 字段

    bin 字段的 key 就是命令(例如:vue-clicreate-react-app

    value 指向该命令对应的脚本路径(例如:index.js

    不同的 key 对应不同的命令跟处理脚本

    这里指定一个 dzm-cli 命令,并指定刚新建的 index.js 最为处理脚本,然后对 package.json 可以进行简化下,需要什么其他配置字段可以自己加:

    {
      "name": "dzm-cli",
      "version": "1.0.0",
      "description": "",
      "bin": {
        "dzm-cli": "index.js"
      }
    }
    

    image.png

三、本地测试与发包

  • 先本地测试一下,在 package.json 目录通过创建本地软链进行测试

    # 创建测试链接
    $ npm link
    
    # 移除测试链接
    $ npm unlink dzm-cli
    

    执行后 npm 本地就会通过项目中 package.jsonbin 字段创建对应的命令可执行文件,然后就可以直接使用命令测试了。

    $ dzm-cli
    
    $ dzm-cli 参数1 参数2 参数3
    
  • 测试没有问题后,可以通过 $ npm publish 发包了!注意:发包时必须保证 npm 源为官方源,不能是第三方源,要不然会发包失败!没有 npm 账号的自行官网注册一个。(附:NPM 上传发布详细流程)

    image.png

三、使用

  • 发包成功后,项目中安装测试一下

    $ npm i -g dzm-cli
    
  • 项目中使用

    $ dzm-cli
    
    # 输出
    [
      '/Users/xxx/.nvm/versions/node/v16.20.0/bin/node',
      '/Users/xxx/Desktop/Project/dzm-cli/index.js'
    ]
    
    $ dzm-cli 参数1 参数2 参数3
    
    # 输出
    [
      '/Users/xxx/.nvm/versions/node/v16.20.0/bin/node',
      '/Users/xxx/Desktop/Project/dzm-cli/index.js'
      '参数1',
      '参数2',
      '参数3'
    ]
    
  • 然后就可以通过判断参数进行处理了,也可以使用相应的插件库更好的对命令进行处理!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1 八皇后问题

算法 八皇后问题是在国际象棋的棋盘上放八个皇后,八个皇后不能互相攻击。国际象棋的皇后,可以横向攻击也可以纵向攻击,也可以斜向攻击。所以要放八个皇后,就必须任一直线和斜线上不能同时有两个皇后。比如以下就是一个八皇后方案&…

eslint的使用

为什么要使用eslint? ​ eslint可以帮助我们统一代码语法规范。 eslint官网: https://eslint.org/ 1.vscode中改缩进 ​ 设置->tabsize-> tab-size和vetur都改成2 ​ format->格式化->勾选format on save 2.Vscode安装Eslint插件 (1)配置Eslint插件 ​ 设…

Yandex:你不可错过的全能搜索引擎

目录 前言一、Yandex网站介绍1-1、网站介绍1-2、优势 二、Yandex网站使用技巧2-1、Yandex搜索引擎2-2、Yandex Maps2-3、Yandex Mail2-4、Yandex Games2-5、Yandex Images2-6、Yandex Video2-7、Yandex.Translate 结语 前言 andex是一家俄罗斯的互联网公司,成立于19…

【HarmonyOS】元服务和APP的相互跳转、相互成就

【关键字】 卡片、跳转、加桌 【背景介绍】 随着鸿蒙生态的发展,各种类型的应用都已经可以在Harmony OS上无差异的运行,面对鸿蒙新兴元服务的兴起,各大厂家可能都在考虑一个问题:如果已经有APP了,有必要再开发一款元…

用 JavaScript 对抗 DDOS 攻击 (下)

抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久。 但简单、好玩,似乎这正是对抗的乐趣。之前从未想过,居然还能把脚本黑科技,用在网络防御上。 于是,又陆陆续续对抗了一段时间。 直到兴致淡却&am…

WordPress 网站管家小程序源码

正文: Wordpress网站管家小程序源码,基于uniapp开发的产品,WP管家是主打用户访问端,兼容了微信小程序与安卓APP(其他端未测试),用于用户的访问。 1、在Wordpress根目录新建一个文件夹&#xf…

达美乐的面试(部分)(未完全解析)

Java如何保证非线程安全的数据结构(比如HashMap)的原子性?读多写少时用哪种锁好? A: 方法1:CAS等乐观锁机制,方法2:如果读多写少,可以使用读写锁(ReentrantReadWriteLock&#xff0…

在Centos Stream 9上Docker的实操教程(二) - Docker的常用命令

在Centos Stream 9上Docker的实操教程 - Docker的常用命令 Docker启动类命令Docker镜像命令镜像列表 docker images镜像查找 docker search拉取镜像 docker pull删除镜像 docker rmi查看占用信息 docker system df容器创建新镜像 docker commit 容器命令启动容器 docker run查看…

vue组件化路由

文章目录 vue项目1.vue组件2.插槽3.自定义指令4.vue路由 vue项目 vue项目中src目录的构成 assets: 存放项目中用到的静态资源文件,例如css,图片资源等components: 存放我们封装的、可复用的组件main.js: 项目的入口文件,整个项目的运行要先执行main.jsApp.vue: 项目的根组件 …

定时器详解 -- 定时器中断、PWM输出 --stm32

STM32定时器使用 STM32定时器计数模式定时器工作原理基本定时器:TIM6、TIM7示例代码代码讲解 通用定时器:TIM2、TIM3、TIM4、TIM5高级定时器:TIM1、TIM8定时器PWM输出原理通用定时器3控制通道1输出PWM脉冲代码 总结参考资料 STM32定时器 STM…

加密与解密 调试篇 动态调试技术 (三)-OllyDbg 插件 Run/Hit 符号调试 加载程序

目录 插件 这里给出一个命令行插件 Run Trace 运行 Hit Trace 符号调试 符号格式 1.SYM格式 2.COFF格式 3.CodeView格式 4.PDB格式 5.DBG格式 6.MAP文件 创建调试文件 加载程序 1.CreateProcess 2.将OllyDbg附加到一个正在运行的程序上 插件 OllyDbg允许插件 …

1计算机网络体系结构_1.1计算机网络概述

1.1.1计网_概念 概念: 计网是一个 将【分散的、具有独立功能的】计算机系统,通过【通信设备与线路】连接起来,由功能完善的软件实现资源共享和信息传递的系统。简言之,计算机网络就是一些 互连的、自治的 计算机系统 的 集合。 …

excel函数采集,截取特殊符号前面/后面数据

截取前面 LEFT(I2,FIND("-",I2)-1) 截取后面 MID(I2,FIND("-",I2)1,99) 房贷利率计算公司,等额本金 (B2-G2*A2)*F2*0.01 Excel常用电子表格公式大全  一、Excel基本公式   1、查找重复内容公式:IF(COUNTIF(A:A,A2)>1,&qu…

国密算法解析

国密算法即国家密码局认定的国产密码算法。 国密算法是商用密码,仅能用于商业用途。国密算法是一套标准,由国家密码局制定的规范,凡是符合的,都可以称之为国密算法。国密算法暂无官方的代码实现,企业可以自己编码实现…

2022年五一杯数学建模A题血管机器人的订购与生物学习解题全过程及论文和程序

2022年五一杯数学建模A题 血管机器人的订购与生物学习 原题再现: 随着微机电系统的发展,人类已经可以加工越来越小的机器。这些机器小到一定程度就可以放进血管开展疾病治疗,这就是血管机器人。血管机器人可以携带药物放入血管里定点治疗与…

信号调制的工作原理

要理解如何进行无线数据传输,我们需要了解: 什么是频率? 信息/数据信号 时间表示 频率表示,为什么它很重要? 滤波器如何工作? FCC通信频段 调制和解调 这些主题可能您在大学专业课上学过&#xff0c…

uboot下的mw写内存和md显示内存命令以及nand命令

配置uboot参数 setenv ipaddr 192.168.0.10;setenv serverip 192.168.0.40;setenv gatewayip 192.168.0.1;setenv netmask 255.255.255.0 setenv bootargs mem512M consolettyAMA0,115200 root/dev/mtdblock2 rootfstypeyaffs2 rw init/init mtdpartshinand:1M(boot),4M(kern…

面试offer收割机,爆肝整理高频软件测试面试题(带答案)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 软件测试面试题&am…

excel 给合并的单元格进行序号填充

一、问题描述 提示:这里描述项目中遇到的问题: 在使用excel 的时候,是否遇到过要给合并单元格排序的情况,下拉会显示需要相同的单元格才行,如图: 二、解决方案 目的是给单元格计数,所以使用…

Module not found: Error: Can‘t resolve ‘fs‘ in ‘/root/workspace/

项目发版时 因为webpack5 不会自动引入polyfills 导致报了一系列错, 按照提示做如下配置 externals 官网文档解释的很清楚,就是webpack可以不处理应用的某些依赖库,使用externals配置后,依旧可以在代码中通过CMD、AMD或者wi…