NodeJs module 的初步理解
2016-02-22 19:45
567 查看
一个node js文件就相当于一个模块。
在客户端,通过script 标签引入 Js 文件,那么就可以访问其内容。但是这样会带来弊端很多,最大的就是作用域相同,产生冲突问题。nodejs 使用了 exports 对象和 require 对象来解决对外提供接口和引用模块问题。
那么就可以这样使用:
使用:
同时,可以改成这个样子:
使用的时候,就可以变成这个样子:
为了方便,模块中也会有一个 exports对象,它和 module.exports指向的是同一个变量,所以我们修改exports对象的时候也会自动修改module.exports对象。
所以当module.exports对象不为空的时候, exports对象就自动忽略了,因为最后是返回 module.exports对象,而 module.exports对象 和exports对象指向已经不一样了。所以对exports对象的改动会失效。
核心模块优先级最高,当有命名冲突的时候,首先加载核心模块。文件模块只能按照路径加载。
查找node_modules 目录,当require 遇到一个既不是核心模块,又不是以路径表示的模块名称的时候,则会在当前目录下查找 node_modules 目录,如果没有,则会继续在当前目录的上一层的 node_modules 目录查找,以此循环到根目录。
在客户端,通过script 标签引入 Js 文件,那么就可以访问其内容。但是这样会带来弊端很多,最大的就是作用域相同,产生冲突问题。nodejs 使用了 exports 对象和 require 对象来解决对外提供接口和引用模块问题。
Node 对外提供接口
可以把模块中希望被外界访问的内容定义到exports对象中。例如:var name=''; function setName(n){ name=n; } function printName(){ console.log(name); } exports.setName=setName; exports.printName=printName;
那么就可以这样使用:
var test=require('./test'); test.setName('Byron'); test.printName();
exports 对象
var Student=function(){ var name=''; this.setName=function(n){ name=n; }; this.printName=function(){ console.log(name) ; }; }; exports.Student=Student;
使用:
var Student=require('./test').Student; var student=new Student(); student.setName('Byron'); student.printName();
同时,可以改成这个样子:
var Student=function(){ var name=''; this.setName=function(n){ name=n; }; this.printName=function(){ console.log(name) ; }; }; module.exports=Student;
使用的时候,就可以变成这个样子:
var Student=require('./test');
module.exports 与 exports 区别
首先,每个模块都会自动创建 一个 module 对象,对象有一个 modules 属性,初始值是个空对象。module 的公开接口 module.exports 就是公开这个属性。为了方便,模块中也会有一个 exports对象,它和 module.exports指向的是同一个变量,所以我们修改exports对象的时候也会自动修改module.exports对象。
所以当module.exports对象不为空的时候, exports对象就自动忽略了,因为最后是返回 module.exports对象,而 module.exports对象 和exports对象指向已经不一样了。所以对exports对象的改动会失效。
require 搜索 module 方式
nodejs 模块有两种类型:核心模块和文件模块。核心模块直接使用名称获取。核心模块优先级最高,当有命名冲突的时候,首先加载核心模块。文件模块只能按照路径加载。
查找node_modules 目录,当require 遇到一个既不是核心模块,又不是以路径表示的模块名称的时候,则会在当前目录下查找 node_modules 目录,如果没有,则会继续在当前目录的上一层的 node_modules 目录查找,以此循环到根目录。
参考
node.js module初步理解相关文章推荐
- Ruby中require、load、include、extend的区别介绍
- 使用ruby部署工具mina快速部署nodejs应用教程
- Google官方支持的NodeJS访问API,提供后台登录授权
- 浅谈Nodejs观察者模式
- nodejs教程之环境安装及运行
- nodejs中的fiber(纤程)库详解
- 基于NodeJS的前后端分离的思考与实践(五)多终端适配
- 基于NodeJS的前后端分离的思考与实践(二)模版探索
- 实例详解Nodejs 保存 payload 发送过来的文件
- Node.js中require的工作原理浅析
- 我的NodeJs学习小结(一)
- nodejs中实现sleep功能实例
- Nodejs异步回调的优雅处理方法
- Windows系统下使用Sublime搭建nodejs环境
- nodejs实现获取某宝商品分类
- nodejs简单实现中英文翻译
- Node.js插件的正确编写方式
- 使用upstart把nodejs应用封装为系统服务实例
- NodeJS Web应用监听sock文件实例
- Nodejs学习笔记之测试驱动