什么是NPM
npm is the package manager for javascript.
是一个NodeJS包管理和分发工具,已经成为了非官方的发布Node模块(包)的标准。
如果你熟悉ruby的gem,Python的pypi、setuptools,PHP的pear,那么你就知道NPM的作用是什么了。
Nodejs自身提供了基本的模块,但是开发实际应用过程中仅仅依靠这些基本模块则还需要较多的工作。幸运的是,Nodejs库和框架为我们提供了帮助,让我们减少工作量。但是成百上千的库或者框架管理起来又很麻烦,有了NPM,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。
npm安装
安装nodejs,npm默认作为全局模块,由于本文主要讲述发布npm到包管理中心,不再赘述。
建议使用nvm安装并管理nodejs版本。参考资料
发布npm模块
安装完npm后,打开终端输入npm,马上就能使用npm提供的cli功能,如图:
引入正文,如何发布module? npm遵循cmd规范,publish前会读取当前目录package.json,匹配version、github信息 etc. (ps:任何一个npm模块源码根目录都会有一个package.json文件供参考)
btw 首次发布需要先添加本地npm用户信息,添加后本地将缓存当前通过验证的用户。
ps:如果使用nrm工具管理源,需先切回npm官方源:nrm use npm
,再次发布跳过此步骤:
$ sudo npm adduser
$ sudo npm whoami
正式发布:
$ cd your project
$ vi package.json // 修改版本号
$ sudo npm publsh
至此,我们已经成功把module发布到了 https://www.npmjs.com,是不是很简单,快动手把自己的module也贡献出来吧。
btw 假设发布太频繁,npm网站用到了缓存(hold on),稍后便可以看到更新的模块。
引申
- 发布模块时,需要更新package版本信息,由于本人比较好奇就去研究了npm版本号规则。
- module源码托管在git服务提供商,如何提交一个tag/issue,自动发布到npm。
关于package版本号
npm社区版本号规则采用的是semver(语义化版本),主要规则如下:
版本格式:主版号.次版号.修订号,版号递增规则如下:
主版号:当你做了不相容的 API 修改,
次版号:当你做了向下相容的功能性新增,
修订号:当你做了向下相容的问题修正。
先行版号及版本编译资讯可以加到「主版号.次版号.修订号」的后面,作为延伸。
关于github托管Hooks
其实就是实现git服务提供商给hooks接口,e.g github提供的提交某个issue就会促发hook,实现此hook只需一个脚本去发布到npm。
以github为例,仅给出参考:
- https://github.com/SegmentFault/deploy-robot
- http://blog.coderzh.com/2015/09/13/use-webhook-automated-deploy-hugo/