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 学习笔记(七)字符串的连接
Dec 31 Javascript
AJAX 网页保留浏览器前进后退等功能
Feb 12 Javascript
ext combobox动态加载数据库数据(附前后台)
Jun 17 Javascript
jQuery搜索同辈元素方法
Feb 10 Javascript
JavaScript中的关联数组问题
Mar 04 Javascript
javascript实现添加附件功能的方法
Nov 18 Javascript
轻松实现jquery手风琴效果
Jan 14 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
js仿网易表单及时验证功能
Mar 07 Javascript
React如何避免重渲染
Apr 10 Javascript
使用JavaScript计算前一天和后一天的思路详解
Dec 20 Javascript
JavaScript 实现继承的几种方式
Feb 19 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
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
php微信开发之上传临时素材
2016/06/24 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
vue按需加载实例详解
2019/09/06 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
Python tkinter模块中类继承的三种方式分析
2017/08/08 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
python先序遍历二叉树问题
2017/11/10 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python利用heapq实现一个优先级队列的方法
2019/02/03 Python
Python如何定义接口和抽象类
2020/07/28 Python
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
Happy Plugs官网:瑞典无线耳机品牌
2020/07/16 全球购物
优秀班干部事迹材料
2014/01/26 职场文书
市场营销方案范文
2014/03/11 职场文书
篮球比赛口号
2014/06/10 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
2016新年慰问信范文
2015/03/25 职场文书
施工安全员岗位职责
2015/04/11 职场文书
给男朋友的道歉短信
2015/05/12 职场文书
离婚案件上诉状
2015/05/23 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书