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 Array数组对象的扩展函数代码
May 22 Javascript
jquery中ajax学习笔记4
Oct 16 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
Sep 03 Javascript
jquery中使用循环下拉菜单示例代码
Sep 24 Javascript
javascript中的作用域和闭包详解
Jan 13 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
深入学习jQuery Validate表单验证
Jan 18 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
详解vue项目中调用百度地图API使用方法
Apr 25 Javascript
VUE实现移动端列表筛选功能
Aug 23 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
Aug 27 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 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
基于PHP异步执行的常用方式详解
2013/06/03 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
PHP加密解密函数详解
2015/10/28 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
js前端传json后台接收‘‘被转为quot的问题解决
2020/11/12 Javascript
Python中的exec、eval使用实例
2014/09/23 Python
centos 下面安装python2.7 +pip +mysqld
2014/11/18 Python
Python多线程编程(五):死锁的形成
2015/04/05 Python
详解Python的Flask框架中的signals信号机制
2016/06/13 Python
Python读取图片为16进制表示简单代码
2018/01/19 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
学习python分支结构
2019/05/17 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
python输入中文的实例方法
2020/09/14 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
大学生毕业自我鉴定范文
2013/09/19 职场文书
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
党的群众教育实践活动实施方案
2014/06/12 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
浅谈JS的原型和原型链
2021/06/04 Javascript
Python中的套接字编程是什么?
2021/06/21 Python
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android