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 相关文章推荐
加载 Javascript 最佳实践
Oct 30 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
详解JavaScript中数组的reduce方法
Dec 02 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
Vue2.0中三种常用传值方式(父传子、子传父、非父子组件传值)
Aug 16 Javascript
解决layUI的页面显示不全的问题
Sep 20 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 Javascript
node.js爬虫框架node-crawler初体验
Oct 29 Javascript
react使用antd的上传组件实现文件表单一起提交功能(完整代码)
Jun 29 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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
vue自定义全局共用函数详解
2018/09/18 Javascript
vue-cli 3.x 配置Axios(proxyTable)跨域代理方法
2018/09/19 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
k8s node节点重新加入master集群的实现
2021/02/22 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
对Python 数组的切片操作详解
2018/07/02 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
python添加模块搜索路径和包的导入方法
2019/01/19 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Pycharm如何打断点的方法步骤
2019/06/13 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
创业计划书的内容步骤和要领
2014/01/04 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
管理标语大全
2014/06/24 职场文书
工作年限证明模板
2014/11/01 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
2015年财务部年度工作总结
2015/05/19 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android