node.js中module模块的功能理解与用法实例分析


Posted in Javascript onFebruary 14, 2020

本文实例讲述了node.js中module模块的功能理解与用法。分享给大家供大家参考,具体如下:

node.js中使用CommonJS规范实现模块功能,一个单独的文件就是一个单独的模块。通过require方法实现模块间的依赖管理。

通过require加载模块,是同步操作。

加载流程如下:

1、找到需要加载的模块文件。

2、判断是否缓存过,如果没有,则读取模块文件的内容。

3、把读取到的内容,封装在一个函数里运行。

(function (exports, require, module, __filename, __dirname) {
  //模块的代码实际上在这里
});

4、返回 module.exports 需要导出的内容。

exports 表示模块的导出对象

require 表示require方法

module 表示当前模块对象

__filename 表示当前文件的绝对路径

__dirname 表示当前文件夹的绝对路径

在模块的内部,this 指向的是 当前模块的导出对象

console.log(this === module.exports);
console.log(this === exports);

module对象有不少属性,可以打印出来看看。

console.log(module);

module.id 表示模块的标识符。

module.exports 表示模块的导出对象。

module.parent 表示当前模块的父模块,当前模块是谁加载的。

module.filename 表示模块的绝对路径。

module.loaded 表示是否加载完成。

module.children 表示当前模块加载了哪些模块。

module.paths 表示模块的搜索路径,路径的多少取决于目录的深度。

node.js通过require方法加载文件是同步的,为了提高效率,会缓存已经加载过的文件。

console.log(require.cache);

缓存的key是模块的绝对路径,value是module对象。

require.resolve获取模块的绝对路径,但并不会加载模块。

console.log(require.resolve('./01.js'));

require.main获取入口模块

console.log(require.main);

require.extensions获取模块支持的扩展名

node.js中模块文件分三种:
1、.js模块
2、.json文件模块
3、.node C++扩展二进制模块

console.log(require.extensions);

node.js通过require加载文件时,比如 require('./user') 会先找 user 文件,然后没找到,再找 user.js,再找 user.json,再找 user.node。

node.js的模块分类:

1、核心模块,编译二进制,加载速度最快,像 fs,http,events等。

2、文件模块,保存在硬盘上,加载速度比较慢,通过名称或路径来加载。

3、第三方模块,只指定名称则从node_modules目录下加载,查询的路径包括module.paths和全局目录。

全局目录:

windows中:环境变量NODE_PATH指定的路径。

linux中:$HOME/.node_modules和$HOME/.node_libraries目录

文件模块查找的规则,比如 require('./user') :

1、判断加载的文件是否以绝对路径加载的。

2、如果是绝对路径,则直接加载绝对路径的文件。

3、如果不是,判断文件有没有以 './' ,'../' 开头,如果有则找到该相对路径,如果没有则通过modules.paths和全局目录获取路径。

4、尝试在第3步中的路径下查找 user 文件。

5、如果没有找到,则尝试加扩展名( user.js,user.json,user.node)进行查找。

6、如果还没有,尝试根据包进行查找,user 目录下,包文件描述 package.json 中 main 配置的文件进行加载。

7、如果没有 package.json,则查找 user 目录下, index.js 和 index.node。

8、如果还没有,则找下一个modules.paths。

9、最后还是没有找到,则文件加载失败。

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
Mac OS X 系统下安装和部署Egret引擎开发环境
Sep 03 Javascript
jQuery的load()方法及其回调函数用法实例
Mar 25 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
原生js实现jquery函数animate()动画效果的简单实例
Aug 21 Javascript
D3.js实现折线图的方法详解
Sep 21 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
百度地图API之百度地图退拽标记点获取经纬度的实现代码
Jan 12 Javascript
如何编写jquery插件
Mar 29 jQuery
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
Vue实现开关按钮拖拽效果
Sep 22 Javascript
JS实现简易计算器
Feb 14 #Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 #Javascript
node.js中npm包管理工具用法分析
Feb 14 #Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 #Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
Feb 14 #Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 #Javascript
JavaScript实现Tab选项卡切换
Feb 13 #Javascript
You might like
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
AngularJS初始化静态模板详解
2016/01/14 Javascript
json的使用小结
2016/06/08 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
JS中promise化微信小程序api
2018/04/12 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
vue表单数据交互提交演示教程
2019/11/13 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Python os模块介绍
2014/11/30 Python
Python中的descriptor描述器简明使用指南
2016/06/02 Python
解读! Python在人工智能中的作用
2017/11/14 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
颁奖典礼主持词
2014/03/25 职场文书
优秀员工演讲稿
2014/05/19 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
2014年艾滋病防治工作总结
2014/12/10 职场文书
党员个人总结范文
2015/02/14 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
2015秋学期开学寄语
2015/05/28 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书