如何创建Nodejs模块基础篇

1. 背景介绍

  • 本人写了一个音乐播放器程序,想把其中核心的部分发布成Nodejs模块,这样我无论是在web端,还是桌面端都能引用该核心模块,我想在web端实现一个网友播放器,桌面端利用Electron包装一下实现一个桌面版的播放器,这样同一套代码,多端就可以共用了.说干就干, 以下记录了nodejs创建一个模块.

2. 创建一个Nodejs模块

3. 首先创建一个nodejs工程

  • 创建用来包含工程文件的文件夹例如

    1
    2
    3
    4
    # 创建用来存放工程的目录
    mkdir h5-audio-player
    # 进入目录
    cd h5-audio-player
  • 初始化nodejs工程

    • 使用npm init 命令来初始化项目,此时它会要求输入一下项目信息,根据自己的实际情况输入即可,
       后续我们会介绍工程文件的各参数的含义,后续还有机会手动调整参数.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      $npm init
      package name: (audioplayer)
      version: (1.0.0) 0.1.0
      description: a javascript library or utility for creating audio player on web or server or mobile side
      entry point: (index.js)
      test command:
      git repository:
      keywords: audioplayer
      author: eagle
      license: (ISC)
      About to write to your_proj_path/h5-audio-player/package.json:
      {
      "name": "audioplayer",
      "version": "0.1.0",
      "description": "a javascript library or utility for creating audio player on web or server or mobile side",
      "main": "index.js",
      "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [
      "audioplayer"
      ],
      "author": "eagle",
      "license": "MIT"
      }
      Is this OK? (yes) yes

  • 初始化完成后, 项目的目录结构如下:

    1
    2
    3
    $tree -L 2
    audioplayer
    └── package.json
    • 可以看到初始化命令帮我们做的工作就是创建了一个package.json文件,里面包含了包名,版本等等信息,如果对package.json熟悉,手写或从其他项目拷贝一份来修改也是可以的,而且了解package.json相关的规范是我们开发nodejs项目必须要掌握的内容.

    • 这里着重要强调一点的是license的选择,对于一个需要发布到npm库上的npm包,license的选择要非常慎重,这个不仅影响自己当前项目或相关联项目,也影响其他人的项目,甚至会涉及到违反知识产权保护的问题,这里推荐阅读开源协议介绍后再做修改.这里我选择的MIT协议,一个相对宽松的协议,目前项目暂时没有依赖第三方nodejs模块的,所以暂时不会受到第三方协议的影响,协议选择完全掌控在自己手里,我可以自己决定.

4. 创建自己的nodejs模块

Node 应用由模块组成,采用 CommonJS 模块规范。
这里放一个非常简单的例子, 首先创建一个greeting模块,也就是greeting.js文件,给世界请安,告诉这个世界我来了.
另外还想让这个模块有点智慧,一出生就能算个加法,当然这个模块最终将比较有音乐天赋.
greeting.js

1
2
3
4
5
6
7
8
9
10
11
12
function greeting() {
console.log("hello, world");
}

function add(a, b) {
result = a + b;
console.log(a + " + " + b + " =" + result);
return result;
}

module.exports.greeting = greeting;
module.exports.add = add;

然后修改package.json, 让main的值等于greeting.js, 这样我们在引入audioplayer的时候,node就会自动去找加载greeting.js,
如果package.json中没有设定main属性或者main属性设置为index.js,node默认会去找audioplayer下的index.js并加载.

1
"main": "greeting.js",

5. 添加README.md文件

  • 为了使他人能找到你的nodejs模块,并获得较好的用户体验,我们建议在模块中包含一个README.md文件. README文件包含一下关于模块的描述信息,怎样安装,如何使用,有没有特殊的配置,以及其他一些有用的信息.当他人搜索到你的模块时,会觉得有帮助,愿意尝试使用你的js包.

6. 测试nodejs模块

  • 发布之前最好测试一下即将发布的模块,这样可以减少因为一些小问题反复发布新版本的问题.下面介绍如何在发布之前进行测试

    • 第一步: 创建一个测试项目

      • 在模块处于同级的位置创建一个测试项目
      1
      mkdir h5-audio-player_test
    • 第二步:测试项目中安装即将发布的模块

      • 这里要说明一点,由于我们的模块还没有真正发布到npm仓库,还不能使用模块名来安装模块

      • 这里安装模块时需要使用模块所处位置的完整路径,或者相对路径

        1
        2
        3
        4
        5
        6
        7
        8
        9
        $cd h5-audio-player_test
        $npm install ../h5-audio-player

        $tree
        h5-audio-player_test
        ├── node_modules
        │   └── h5-audio-player -> ../../h5-audio-player
        ├── package-lock.json
        └── test.js
    • 第三步:编写测试用例

      • 在测试项目下创建一个test.js

        1
        2
        3
        4
        var audioplayer = require('h5-audio-player');
        audioplayer.greeting();
        var sum =audioplayer.add(1, 2);
        console.log(sum)
    • 第四步:运行测试用例

      1
      2
      3
      4
      $node test.js
      hello, world
      1 + 2 =3
      3

    由于时间的关系,也是为了让用户容易理解如何创建nodejs,麻雀虽小五脏俱全,这里创建的nodejs模块和测试用例都非常简单,后续将实现一个非常复杂的案例,考虑到nodejs使用的方方面面,比较接近实战, 敬请期待.

7. 发布nodejs 模块

8. Nodejs 系列文章

最新更新以及更多Nodejs相关文章请访问 鹏叔的技术博客 - Nodejs

9. 参考文档