1.创建模块
创建模块格式如下
var canadianDollar = 0.91; function roundTwoDecimals(amount){ return Math.round(amount*100)/100; } exports.canadian = function(canadian){ return roundTwoDecimals(canadian*canadianDollar); }
canadianDollar 这个变量属于私有变量,外部文件很难访问到,使用这个新模块,要用到require函数。该函数要你用模块的路径为参数,它一般在文件的顶端引入,下面是text.js中的代码,它require了上面的模块exports.js
var currency = require('./exports');//路径./ 表明模块跟程序脚本放在同一个目录下。 console.log(currency.canadian(10));
如果你想把这个模块放到子目录中,比如lib,只要把require语句改成下面这样就可以了:
var currency = require('./lib/exports');
//上面的代码演示了直接把函数封装到模块当作,接下来演示如何把一个对象封装到模块当中。修改exports.js如下:
function calc(){ var x,y; this.add = function(a,b){ console.log("x乘以y"+" "+a*b); } this.sum = function(){ console.log("x乘以y"+(x+y)); } } module.exports = calc;
var module=require("./exports"); var moduleEntity =new module(); moduleEntity.add(1,2);
把一个calc函数封装到模块里面,然后导出为calculator对象,可以通过实例化这个calculator对象来调用相关算法函数
2:用module.exports微调模块的创建
要创建只返回一个变量或函数的模块,你可能会以为只要把exports设定成你想返回的东西就行。但这样是不行的,因为Node觉得不能用任何其他对象、函数或变量给exports赋值。下面这个代码清单中的模块代码试图将一个函数赋值给exports
exports =xxx//xxx代表函数、对象或变量
node不容许重写exports,
为了让前面那个模块的代码能用,需要把exports换成module.exports。用module.exports可以对外提供单个变量、函数或者对象。如果你创建了一个既有exports又有module.exports的模块,那它会返回module.exports,而exports会被忽略。
exports.xx是对module.exports.xx的简写。也可以写成module.exports.xx = exports = xxx;
3:注意事项
尽管Node模块系统的本质简单直接,但还是有两点需要注意一下。第一,如果模块是目录,在模块目录中定义模块的文件必须被命名为index.js,除非你在这个目录下一个叫package.json的文件里特别指明。要指定一个取代index.js的文件,package.json文件里必须有一个用JavaScript对象表示法(JSON)数据定义的对象,其中有一个名为main的键,指明模块目录内主文件的路径。