日期:2014-05-16 浏览次数:20454 次
你来到了写一个mode.js模块的舞台中央,不管你是因为自己需要写一个你自己的nodejs模块,还是你仅仅是处于好奇。无论是什么原因,在这个教程里,我将给你演示怎样创建一个nodejs模块。
nodejs 模块符合CommonJs规范的模块,都是简单的实现。相信我,通过读完这篇文章,你就能够创建一个简单的node模块。
首先,让我们看看怎样在一个app使用通过NPM安装在本地的node模块:
var easyimg = require('easyimage');
创建一个新目录,命名为"modtest",然后cd进入这个目录:
$ mkdir modtest $ cd modtest
$ vi converter.js
exports.bin = function(input) { return input.toString(2); }; exports.hex = function(input) { return input.toString(16); };创建另外一个文件,命名为"app.js",它将作为你的node 应用:
$ vi app.js"app.js"的内容是:
var converter = require('./converter.js'); var num = 10; var bin = converter.bin(num); console.log('BIN:' + bin); var hex = converter.hex(num); console.log('HEX: ' + hex);运行这个node应用:
$ node app.js BIN: 1010 HEX: a至此你已经完成了它。你自己的node模块!
通过上面的例子,你能够明白:如果一个文件包含附带属性的exports,它就能够在任何app中作为一个有效模块使用。然而,我们必须指定模块文件的的路径。那样看起来很不爽,对不对?为什么不能这样写:
var converter = require('converter');当然可以,但是我们需要把这个模块转换成正确的 NPM 包文件 并且在本地安装它。过程是非常简单的,但是需要一些改变。让我们的模块变得整洁一点。
创建一个路径,命名为"converter",重命名"converter.js"为"index.js",并且它移动到"converter"目录下:
$ mkdir converter $ mv converter.js converter/index.js为模块在"converter"目录先,创建一个包定义文件:
$ cd converter $ vi package.json"package.json"文件的内容为:
{ "name": "converter", "version": "0.0.1", "private": true }给这个包,创建一个 README 文件,NPM将会解析它:
$ echo Converts stuff to BIN and HEX! > README.md现在,你所有的设置都是为了创建一个NPM包,执行"pack"命令在当前目录:
$ npm pack converter-0.0.1.tgz妖怪,那里去!我们模块的NPM包就准备好了。"cd"返回到"modtes"目录下,并且从"converter"目录下安装该模块:
$ cd .. $ npm install converter/converter-0.0.1.tgz converter@0.0.1 ../node_modules/converter现在你应该可以这样做:
var converter = require('converter.js'); var bin = converter.binary(1337); console.log(bin);非常成功!你已经创建一个本地node模块 并且使用NPM安装到了你的系统里。那么接下来我们该做什么呢?
怎样发布你开创性的 node模块到线上,这样其他人就可以安装它了,使用它了,并且被它的魅力所征服?这儿是怎么在NPM的注册系统发布一个node模块。
创建一个node模块不仅仅是将属性附件到 exports对象上,然后在app文件里引用该模块。他比这稍微有点深度,我现在将解析一个模块怎么样获得它们的能量。
有2种方法来定义功能性的模块:
1、附加
在这个方法里,我把方法和属性附加到 exports对象上。export对象默认是存在的,你不需要在定义它。在我们是例子中我