如何创建Nodejs模块基础篇
1. 背景介绍
- 本人写了一个音乐播放器程序,想把其中核心的部分发布成Nodejs模块,这样我无论是在web端,还是桌面端都能引用该核心模块,我想在web端实现一个网友播放器,桌面端利用Electron包装一下实现一个桌面版的播放器,这样同一套代码,多端就可以共用了.说干就干, 以下记录了nodejs创建一个模块.
2. 创建一个Nodejs模块
- 创建node非常简单就是创建一个js文件
- 但是对模块暴露对象的方式有要求, 详情参考CommonJS规范 by 阮一峰
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 | function greeting() { |
然后修改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
4var 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 模块
- 发布模块请参考我的博客文章如何发布一个nodejs模块
8. Nodejs 系列文章
最新更新以及更多Nodejs相关文章请访问 鹏叔的技术博客 - Nodejs
9. 参考文档
如何创建Nodejs模块基础篇
https://pengtech.net/nodejs/how_to_create_a_node_module.html