如何写一个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的目录规范创建我们的文件夹和脚本文件。

在接触任何一种新语言时,除了需要了解其语法特征,另一个就是其标准库和常用库了。

对于需要在运行时依赖的库写入 package.json 文件的 dependencies 字段并通过 npm install 安装。

这里介绍几个面向不同方向的常用库:

  1. 如果你准备写文件类处理工具,那么fs做为文件的增删改查以及glob进行文件匹配可以提供帮助;
  2. 在 Node 开发中,流程控制(异步管理)是开发过程中的基本需求,async是知名的相关库;
  3. JS 本身的语法糖和内置函数非常有限,underscore提供了语言增强功能;
  4. 如果你准备写一个命令行应用程序,commandercli可以提供相关的帮助。

最佳实践

在学习了语法,目录规范,标准库常用库后,我们可以通过阅读一些著名npm库源码,领略其设计模式和代码精髓,进一步提升我们npm模块的编写能力。

这里推荐几个不同方向我认为的最佳实践库:

发布与更新

发布

当你完成本地npm模块的编写后,需要把它发布到npm仓库上才可以供其他人安装和使用。

发布npm模块,首先需要你注册一个npm用户,可以通过npm adduser进行注册,然后通过 npm login进行登陆。

登陆完成后,通过npm publish命令进行发布。

更新

完成首次发布后,如果你再次修改了本地的代码,如何将它更新同步到线上呢?

这时候你需要重新发布你的模块。值得注意的是,npm的发布是非覆盖式的。你可以通过 ` npm version `进行非覆盖式发布。``的值是patch, minor, or major。该命令会根据你的参数修改你本地 package.json 文件的 version 字段。

参考资料

Published: December 07 2014