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中SSL服务的性能
Jul 15 NodeJs
nodejs中使用多线程编程的方法实例
Mar 24 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
详解nodejs与javascript中的aes加密
May 22 NodeJs
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
May 13 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodejs 简单实现动态html的方法
May 12 NodeJs
Linux Centos7.2下安装nodejs&amp;npm配置全局路径的教程
May 15 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
php-msf源码详解
2017/12/25 PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
2020/01/23 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
深入理解JavaScript系列(48):对象创建模式(下篇)
2015/03/04 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
百度搜索框智能提示案例jsonp
2016/11/28 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
构建Python包的五个简单准则简介
2015/06/15 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
python遍历小写英文字母的方法
2019/01/02 Python
Python多进程fork()函数详解
2019/02/22 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python 日期区间处理 (本周本月上周上月...)
2019/08/08 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
PHP统计代码行数的小代码
2019/09/19 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
英国床垫在线:Mattress Online
2016/12/07 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
出国留学经济担保书
2014/04/01 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
MYSQL如何查看操作日志详解
2022/05/30 MySQL