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 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
js实现屏幕自适应局部代码分享
Jan 30 Javascript
jQuery插件slider实现拖动滑块选取价格范围
Apr 30 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
Nov 29 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
js读取本地文件的实例
Dec 22 Javascript
AngularJS日期格式化常见操作实例分析
May 17 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
在VUE style中使用data中的变量的方法
Jun 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
PHP添加Xdebug扩展的方法
2014/02/12 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
jQuery代码优化之基本事件
2011/11/01 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
javascript中常用编程知识
2013/04/08 Javascript
了不起的node.js读书笔记之例程分析
2014/12/22 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
2016/05/10 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
win7上python2.7连接mysql数据库的方法
2017/01/14 Python
Python简单生成8位随机密码的方法
2017/05/24 Python
python 内置函数filter
2017/06/01 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
Python实现的随机森林算法与简单总结
2018/01/30 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
详解Python 定时框架 Apscheduler原理及安装过程
2019/06/14 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
大学生职业生涯规划书参考模板
2014/03/05 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
2016优秀护士先进个人事迹材料
2016/02/25 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
Python趣味爬虫之用Python实现智慧校园一键评教
2021/05/28 Python