如何写一个npm模块
现在来说npm,似乎有种过气的感觉。
而此时我正想表达的是,我对 Node 前景的信心,以及对 Javascript 这门语言的信心;)
我认为,以 Node 为媒介的前后端分离将会是web应用编程协作模式的未来;Node 将会是未来最常用的工具类脚本(超过shell);而Js,CSS,HTML的这套软件开发体系会是未来软件开发的首选。
基于这样的信心,我坚决地选择了 Node。如果你也有兴趣于此,那么不妨一起来看一下,如何写一个npm模块。
package.json
对于一个npm模块而言,它肯定存在一个package.json文件。这是一个包描述文件,npm的所有行为都与这里面的内容息息相关。关于该文件内的字段说明,可以参考npm的官方文档以及它的解析源码。知名的框架express项目的 package.json 文件,具有一定的参考意义。
创建npm模块的第一步就是生成 package.json 文件,我们可以使用npm的命令参照提示生成它,运行 npm init
即可。
目录规范
npm init
只为我们生成了 package.json 文件。接着我们应当参照CommonJS的目录规范创建我们的文件夹和脚本文件。
库
在接触任何一种新语言时,除了需要了解其语法特征,另一个就是其标准库和常用库了。
- Node的标准库有这些:http://nodejs.org/api/index.html
- Node的常用库可以参考:https://www.npmjs.org/browse/depended
对于需要在运行时依赖的库写入 package.json 文件的 dependencies 字段并通过 npm install
安装。
这里介绍几个面向不同方向的常用库:
- 如果你准备写文件类处理工具,那么fs做为文件的增删改查以及glob进行文件匹配可以提供帮助;
- 在 Node 开发中,流程控制(异步管理)是开发过程中的基本需求,async是知名的相关库;
- JS 本身的语法糖和内置函数非常有限,underscore提供了语言增强功能;
- 如果你准备写一个命令行应用程序,commander或cli可以提供相关的帮助。
最佳实践
在学习了语法,目录规范,标准库常用库后,我们可以通过阅读一些著名npm库源码,领略其设计模式和代码精髓,进一步提升我们npm模块的编写能力。
这里推荐几个不同方向我认为的最佳实践库:
- 命令行工具:jshint cli
- web框架:express
- 任务管理:grunt
发布与更新
发布
当你完成本地npm模块的编写后,需要把它发布到npm仓库上才可以供其他人安装和使用。
发布npm模块,首先需要你注册一个npm用户,可以通过npm adduser
进行注册,然后通过 npm login
进行登陆。
登陆完成后,通过npm publish
命令进行发布。
更新
完成首次发布后,如果你再次修改了本地的代码,如何将它更新同步到线上呢?
这时候你需要重新发布你的模块。值得注意的是,npm的发布是非覆盖式的。你可以通过 ` npm version