Node.js 里有原生模块和文件模块, Node.js 可以使用 require() 包含其它文件里的功能, 然后使用 require 返回的对象调用模块里的公共方法;
加载模块
使用 require() 加载, 参数有以下四种
- 加载原生模块, 直接写模块名, 如 "http"
- 模块的相对路径
- 模块的绝对路径
- 要加载的文件的路径
创建自己的模块
- module.exports
- exports
如果没有 module.exports 的话, exports 可以修饰多个接口, 返回时把这若干个接口整合成一个 module.exports;
如果 module.exports 和 exports 共存, 且 使用 module.exports引入对象, exports 修饰的接口将忽略;
使用 module.exports 引入属性/函数, 和 使用 exports 一样, 同名函数, 后一个会覆盖前一个
exports
1 2 3 4 5 6 7 8 9 10 |
// 定义一个方法, 文件路径 "./lib/index.js" exports.hello = function () { console.log('Hello world!'); }; // 加载模块 var my = require('./lib'); my.hello();// 调用时输出 Hello world! |
使用 exports 引入的方法和属性直接通过 require 返回的对象调用;
module.exports
module.exports 指定模块为类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 定义一个类, 文件路径 "./lib/index.js" function MyClass(){ var count=0; this.getCount=function(){ return count; } } module.exports = MyClass; // 调用 var MyClass = require('./lib'); myClass = new MyClass();// 实例化对象 console.log(myClass.getCount() + " "); |
模块文件中定义两个 module.exports 类 的话, 后一个会覆盖前一个
module.exports 指定模块为其它类型
1 2 3 4 5 6 7 8 |
// 文件路径 "./lib/index.js" module.exports = "string"; // 该模块是字符串 // module.exports = ['array1','array2','array3'];//定义数组 // 使用 var s = require('./lib'); console.log(s + " ");//输出 string |
module.exports引入方法和类共存
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 28 29 30 31 32 33 34 35 |
// 文件路径 "./lib/index.js" // 定义一个类 function MyClass(){ var count=0; } // 定义一个类 function MyClass2(){ var count=0; this.getCount=function(){ console.log('getCount'); } } // 引入类要写在方法前面 module.exports=MyClass;// MyClass 会被忽略 module.exports=MyClass2; // 定义一个方法, hello1 会被忽略, 无论写在module.exports的前还是后 exports.hello1 = function () { console.log('Hello world 1 !'); }; // hello2 会保留 module.exports.hello2 = function () { console.log('Hello world 2 !'); }; // 调用 var MyClass = require('./lib'); console.log(MyClass);// { [Function: MyClass2] hello2: [Function] } MyClass.hello2();//Hello world 2 ! myClass = new MyClass(); myClass.getCount();//getCount |
不引入类时, module.exports 和 exports 的共存
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 模块文件部分 // hello1 将保留 exports.hello1 = function () { console.log('Hello world 1 !'); }; // hello2 module.exports.hello2 = function () { console.log('Hello world 2 !'); }; // 调用 var MyClass = require('./lib'); console.log(MyClass);// { hello2: [Function], hello1: [Function] } |
0 Comments