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读取ASP设定的COOKIE
Nov 24 Javascript
js 程序执行与顺序实现详解
May 13 Javascript
uploadify在Firefox下丢失session问题的解决方法
Aug 07 Javascript
JS实现切换标签页效果实例代码
Nov 01 Javascript
基于javascript显示当前时间以及倒计时功能
Mar 18 Javascript
jsp 自动编译机制详细介绍
Dec 01 Javascript
优雅的在React项目中使用Redux的方法
Nov 10 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
Dec 18 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
Apr 04 jQuery
Vue 2.0双向绑定原理的实现方法
Oct 23 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
jquery+css3实现的经典弹出层效果示例
May 16 jQuery
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语法(1)
2006/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
微信小程序 网络请求(GET请求)详解
2016/11/16 Javascript
jquery仿京东侧边栏导航效果
2017/03/02 Javascript
node.js操作mysql简单实例
2017/05/25 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
element-ui使用导航栏跳转路由的用法详解
2018/08/22 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
JS实现“全选”和"全不选"功能代码实例
2020/02/06 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
JS实现表单中点击小眼睛显示隐藏密码框中的密码
2020/04/13 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
python实用代码片段收集贴
2015/06/03 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
Python2和Python3中print的用法示例总结
2017/10/25 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python-opencv颜色提取分割方法
2018/12/08 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
Python使用jpype模块调用jar包过程解析
2020/07/29 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
The Beach People美国:澳洲海滨奢华品牌
2018/07/05 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
技术总监岗位职责
2013/12/05 职场文书
软件售后服务方案
2014/05/29 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
优秀团员自我评价
2015/03/10 职场文书
贷款工作证明模板
2015/06/12 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书
Python Pandas pandas.read_sql函数实例用法
2021/06/21 Python
python中super()函数的理解与基本使用
2021/08/30 Python
Go 中的空白标识符下划线
2022/03/25 Golang