参考 http://blog.csdn.net/bugknightyyp/article/details/8783162,但上面的过程有不少谬误,我亲自试验并作了梳理如下【另也是针对window版的】:
nodejs 模块符合CommonJs规范的模块,都是简单的实现。相信我,通过读完这篇文章,你就能够创建一个简单的node模块。
首先,让我们看看怎样在一个app使用通过NPM安装在本地的node模块:
var easyimg = require('easyimage');
定义在easyimage模块中的方法和属性就会出现在easyimg对象中。你可以使用它们,像这样 easyimg.resize(), easyimg.crop()等等。想当方便的模块化,对不对?接下来讲述怎么为你自己创建一个。
创建一个新目录,命名为"modtest",然后cd进入这个目录:【win7右键建目录,命令行cd到目录也一样】
$ mkdir modtest $ cd modtest
创建一个文件,命名为"converter.js",做为你的模块文件:
$ vi converter.js
converter.js模块将有2个方法,一个是将输入传唤成二进制,另外一个是转换成十六进制。"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
【以上在win7直接鼠标操作即可,总之就是要把刚才写的converter.js转成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
【这个就手动在"converter"目录建个README.md文件,README.md内容写上Converts stuff to BIN and HEX!】
现在,你所有的设置都是为了创建一个NPM包,执行"pack"命令在当前目录:
$ npm pack
这样会自动生成一个 converter-0.0.1.tgz
"cd"返回到"modtest"目录下,并且从"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.bin(1337); console.log(bin);
非常成功!你已经创建一个本地node模块 并且使用NPM安装到了你的系统里。那么接下来我们该做什么呢?
怎样发布你开创性的 node模块到线上,这样其他人就可以安装它了,使用它了,并且被它的魅力所征服?这儿是怎么在NPM的注册系统发布一个node模块。
创建一个node模块不仅仅是将属性附件到 exports对象上,然后在app文件里引用该模块。他比这稍微有点深度,我现在将解析一个模块怎么样获得它们的能量。
有2种方法来定义功能性的模块:
1、附加
在这个方法里,我把方法和属性附加到 exports对象上。export对象默认是存在的,你不需要在定义它。在我们是例子中我们使用附加的方法来创建"converter"模块。
exports.bin = function(input) { return input.toString(2); }; exports.hex = function(input) { return input.toString(16); };
...
如果你需要在模块的内部调用当前模块的方法,你创建一个本地变量并把附加的属性赋值给它:
var bin = exports.bin = function(input) { return input.toString(2); };
现在你能够调用方法bin()来代替exports.bin()在当前module 文件里。不要烦这样的错误:
bin = exports.bin = function() ...
或这样:
exports.bin = bin = function() ...
bin变量暴露到全局命令空间里!如果你想知道更多的关于全局变量和nodejs的全局命令空间,你将会喜欢Global Variables in Node.js。
2、赋值:
在这种方法里,我们分配一个javascript对象给 module.exports,它也是默认存在的在任何的被引用的模块文件中。这儿是一个使用赋值方法来创建模块的例子:
File: pi.js
module.exports = 22/7;
File: app.js
var PI = require('./pi'); console.log(PI);
注意你怎样能够忽略以".js"扩展名命名的模块。现在就是你执行app.js的时候了:
$ node app.js 3.142857142857143
注意 该模块的值怎么是PI,而不是一个含有方法和属性的对象。使用赋值方法,你的模块可以是任何有效的javascript对象-Boolean,undefined,Number,Function等等。
一种常用的使用赋值方法的方式是返回一个function,它可以被当作class来使用:
File: pokemon.js
module.exports = function(name, age) { this.name = name; this.age = age; this.get_name = function() { return this.name; } this.get_age = function() { return this.age; } };
File: app.js
var Pokemon = require('./pokemon'); var pokemon = new Pokemon('Piakchu', 99); // OCD var age = pokemon.get_age(); console.log(pokemon.get_name() + ' is ' + age + ' year' + (age == 1? '': 's')
如果你的js知识和技巧接近专家水平,那么你就能够和好的使用赋值方法来创建模块,因此确保拿出足够的时间去学习更多的javascript知识,如果你的javascript知识还不够多。
那么以上2种那种是定义nodejs模块的最好方式?这取决于你想从模块里得到什么,以及你知道多少javascript知识。要想当一个好的node.js开发者,你首先需要是一个好的javascript开发者,因此接下来好好学习javascript!
噢,顺便说下,你可能会喜欢我提交的这篇文章:exports vs. module.exports in Node.js
我希望你从这篇教程里学会了你想创建nodejs模块的所有知识。如果说我错过了什么,我一直是允许评论的,所以请留言给我。
原文: http://www.hacksparrow.com/how-to-write-node-js-modules.html
相关推荐
win7 64位系统最新的node.js安装包,和 npm安装sass-loader node-sass win10 win7安装与常见问题解决办法
工具全名:node-v14.17.3-x64.msi,node.js已集成npm,直接安装该包即可。
v12.14.0版本的node.js 6.13.4版本的npm
包含35种轻量级功能,可以获取详细的硬件,系统和操作系统信息(支持Linux,macOS,部分Windows,FreeBSD和SunOS) - 没有npm依赖。
node.inflection, 一个变为 node.js 模块的变 变化一个变为 node.js 模块的变描述是从 Rails 到Javascript的功能端口,它是从到Javascript的功能接口。 inflection 是 inflection-js 到 node.js npm包的端口。 将的...
长截图;如何在Windows系统上安装node.js和NPM;环境配置参考。
我是使用 npm 命令来引入这个库,Node Package Manager 是 Node 包管理工具,方便大家导入各类 JavaScript 开源包(运行在 Node.js 上),Node.js 是一个 JavaScript 运行环境。 首先得先下载 Node.js ,官网链接 ...
Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, [1] 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、...
这是一个Node.js的安装包,具体版本为21.7.1,并且是适用于x64架构(即64...通常,安装这个版本的Node.js会包括npm(Node Package Manager)的相应版本,npm是Node.js的包管理器,允许用户安装和管理Node.js模块和库。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm
node.js12.22.12+npm6.14.4
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时
这个资源是一个Microsoft Word文档(.docx),它描述了如何安装Node.js和npm,以及如何创建一个Vue应用的过程。 其中,Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它使得JavaScript可以在服务器端运行。...
将Url文本转换成Hiperlink的JavaScript库和npm模块
[Packt Publishing] Node.js the Right Way Practical, Server-Side JavaScript That Scales (E-Book) ☆ 图书概要:☆ Get to the forefront of server-side JavaScript programming by writing compact, robust,...
一个Node.js模块,可帮助您在使用NPM安装软件包/项目时获得有用的见解。 :red_exclamation_mark: 我们目前不支持Windows操作系统 :red_exclamation_mark: 目录: 安装 $ npm install -g datreeio 如果您想通过...
node.js windows绿色安装(含geddy/npm)
清理脏话敏感字的Node模块
node-v0.8.4-x86_withNPM 装一大堆不匹配的童鞋有福了,这个直接把npm和node.js一起装好,省去了很多麻烦。 我自己用过,非常的好。 之前装了node.js再装npm,花老半天都没整好。
自动安装由bundle导入但尚未包含在package.json中的依赖项