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 相关文章推荐
用jscript启动sqlserver
Jun 21 Javascript
推荐40个非常优秀的jQuery插件和教程【系列三】
Nov 09 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
Dec 28 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
js和jquery中循环的退出和继续下一个循环
Sep 03 Javascript
js实现可折叠展开的手风琴菜单效果
Sep 07 Javascript
js和jq使用submit方法无法提交表单的快速解决方法
May 17 Javascript
JS实现动态修改table及合并单元格的方法示例
Feb 20 Javascript
mac上node.js环境的安装测试
Jul 03 Javascript
使用百度地图实现地图网格的示例
Feb 06 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
Vue如何实现验证码输入交互
Dec 07 Vue.js
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
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
CodeIgniter框架URL路由总结
2014/09/03 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
2016/10/11 Javascript
JS实现根据用户输入分钟进行倒计时功能
2016/11/14 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
es6数组includes()用法实例分析
2020/04/18 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
更改Python命令行交互提示符的方法
2015/01/14 Python
python输出指定月份日历的方法
2015/04/23 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
对Python3中列表乘以某一个数的示例详解
2019/07/20 Python
python+openCV调用摄像头拍摄和处理图片的实现
2019/08/06 Python
python批量处理文件或文件夹
2020/07/28 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
python 将Excel转Word的示例
2021/03/02 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
车工岗位职责
2013/11/26 职场文书
学习十八大报告感言
2014/02/04 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
安全宣传标语口号
2014/06/06 职场文书
道歉信范文
2015/05/12 职场文书
护士岗前培训心得体会
2016/01/08 职场文书