Nodejs 发布自己的npm包并制作成命令行工具的实例讲解


Posted in NodeJs onMay 15, 2018
<span style="font-family:Arial, Helvetica, sans-serif;background-color:rgb(255,255,255);">近日当我在使用npm上已经存在的一个包时,发现它有bug;于是决定自己实现这个功能,自己写一个npm包。</span>

下面我记录一下自己的实现过程。

1. npm init

选择一个文件夹,然后用命令行cd进去,然后执行npm init,这时会生成一长串表单,根据自己的实际情况填写内容

name:填写你这个包的名字,默认是你这个文件夹的名字。不过这里要着重说一下,最好先去npm上找一下有没有同名的包。最好的测试方式就是,在命令行里面输入npm install 你要取的名字,如果报错,那么很好,npm上没有跟你同名的包,你可以放心大胆地把包发布出去。如果成功下载下来了。。。那么很不幸,改名字吧。。。

version:你这个包的版本,默认是1.0.0

description:其实我也不知道是什么,按回车就好了。。。,这个用一句话描述你的包是干嘛用的

entry point:入口文件,默认是Index.js,你也可以自己填写你自己的文件名

test command:测试命令,这个直接回车就好了,因为目前还不需要这个。

git repository:这个是git仓库地址,如果你的包是先放到github上或者其他git仓库里,这时候你的文件夹里面会存在一个隐藏的.git目录,npm会读到这个目录作为这一项的默认值。如果没有的话,直接回车继续。

keyword:这个是一个重点,这个关系到有多少人会搜到你的npm包。尽量使用贴切的关键字作为这个包的索引。我这个包嘛,第一是在express下工作的,然后又是一个插件plugin,然后又是一个注册路由route用的,而这个路由又是基于文件目录dir,所以很好就得出我的包的索引关键字。

author:写你的账号或者你的github账号吧

license:这个直接回车,开源文件来着。。。

然后它就会问你Are you ok?

回车Ok!

然后我们回到我们的文件目录里面去看一看,发现多出来一个package.json文件

然后,在目录下新建一个index.js文件,或者你刚才修改了那个entry point的值,那么你这个文件名也跟着改为那个值。

Nodejs 发布自己的npm包并制作成命令行工具的实例讲解

我的npm工程目录结构就是这样的,注意其中的bin文件夹是我为了制作命令行工具才生成的,后面会讲到怎么生成命令行工具;当然,如果那不想生成命令行工具,这个文件夹就不需要了。

因为我把封装好的代码都扔在lib里面,所以,index.js里面也就一句话:

module.exports=require('./lib')

然后,最重要的,写好README.md,一个给大家描述你的包的markdown文件,如果大家都不知道你的代码是做什么的,会有人去下载你的代码吗?哦,对了,最好写英文。

2. npm publish

写完自己的npm包,测试运行没问题后就可以发布到npm上

首先得注册个npm帐号

用npm命令登陆一下

然后,在你的目录下使用npm publish

注意:一般情况下,一旦你要修改你已经发布后的代码,然后又要执行发布操作,务必到package.json里面,把version改一下,比如从1.0.0改为1.0.1,然后在执行npm publish,这样就可以成功发布了。

3. 生成命令行工具

在使用 Nodejs 过程中,有很多包都支持全局安装,提供一个命令,然后在命令行我们就可以完成一些任务。有时候我们也需要开发这样的命令工具。在Node.js 中发现弄个命令行工具特别轻松。我使用的是commander包来生成命令行工具

$ npm install commander

然后cd到bin目录下,新建一个.js文件(名字自取),编写代码,在js文件顶部加上#!/usr/bin/env node

例如我的geAsar.js:

#!/usr/bin/env node
var asar = require('../lib/geAsar')
var program = require('commander');

program.version('v' + require('../package.json').version)
  .description('Manipulate asar archive files')

program.command('pack <dir> <output>')
  .alias('p')
  .description('create asar archive')
  .action(function (__dirpath, output) {
   asar.geAsar(__dirpath,output);
   console.log(output+"文件成功生成");
  })
program.parse(process.argv)

if (program.args.length === 0) {
 program.help()
}

然后还需在package.json中添加

"bin": { 
 "geAsar": "./bin/geAsar.js" 
 },

运行 node bin/geAsar.js 会显示当前文件夹下的所以文件和文件夹名。这个玩意儿真的跑起来了.

全局运行命令调试

install

如果在项目目录下运行没有问题,可以将当前目录模块安装到全局,也可以采用此方法来更新你的命令行工具

sudo npm install . -g

link

或者目录输入 npm link 会自动添加全局的 symbolic link ,然后就可以使用自己的命令了。 (我用的是这个)

以上这篇Nodejs 发布自己的npm包并制作成命令行工具的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS url验证(url-valid)的使用方法
Nov 18 NodeJs
ubuntu下安装nodejs以及升级的办法
May 08 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
nodejs async异步常用函数总结(推荐)
Nov 17 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
webpack打包nodejs项目的方法
Sep 26 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
NodeJs crypto加密制作token的实现代码
Nov 15 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
May 15 #NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 #NodeJs
webstorm中配置nodejs环境及npm的实例
May 15 #NodeJs
基于nodejs res.end和res.send的区别
May 14 #NodeJs
nodeJs爬虫的技术点总结
May 13 #NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 #NodeJs
nodejs取得当前执行路径的方法
May 13 #NodeJs
You might like
百度工程师讲PHP函数的实现原理及性能分析(三)
2015/05/13 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
2019/05/28 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
遍历DOM对象内的元素属性示例代码
2014/02/08 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
2016/08/03 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
详解vue-cli中的ESlint配置文件eslintrc.js
2017/09/25 Javascript
vue-cli+webpack项目 修改项目名称的方法
2018/02/28 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
React实现todolist功能
2020/12/28 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
pygame实现简易飞机大战
2018/09/11 Python
python定义类self用法实例解析
2020/01/22 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
莫斯科珠宝厂官方网站:Miuz
2020/09/19 全球购物
致标枪运动员广播稿
2014/02/06 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
大学拉赞助协议书范文
2014/09/26 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
作弊检讨书
2015/01/27 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技