Nodejs中的模块系统
一、模块化的定义
①具有文件作用域
②具有通信规则:加载和导出规则
二、CommonJS模块规范
1.nodejs中的模块系统,具有文件作用域,也具有通信规则,使用require方法加载模块,使用exports接口对象导出模块中的成员
2.加载require
①语法:
var 自定义变量名称 = require(‘模块’)
②两个作用:执行被加载模块中的代码,得到加载模块中的exports导出接口对象
3.导出exports
①nodejs中的是模块作用域,默认文件中的所有成员只在当前文件模块有效
②对于希望可以被其他模块访问的成员,可以挂载到exports接口对象中
③导出多个成员(必须在对象中):
//导出数字
exports.a=123;
//导出字符串
exports.b='hello';
//导出函数
exports.c=function(){
console.log('good');
}
//导出对象
exports.d={
foo:'bar'
}
④导出单个成员(拿到的是就是函数、字符串等等,而不是一个对象):
moudle.exports='hello';
⑤以下情况会覆盖
module.exports='hello';
module.exports={
num:123,
str:'world'
}
⑥也可以这样来导出多个成员
module.exports={
num:123,
str:'world',
add:function(x,y){
return x+y;
}
}
⑦原理解释:exports是moudle.exports的一个引用,exports和module.exports的区别在于,每个模块都有一个module对象,module对象中有一个exports对象,可以把需要导出的成员都挂载到module.exports接口对象中,也就是‘ module.exports.xxx=xxx ’ 的方式,但是每次都这样书写太麻烦,所以nodejs为了更加方便,同时在每一个模块提供了一个成员叫‘ exports ’,令‘ exports===module.exports ’ 结果为‘ true ’ ,所以对于 ‘ module.exports ’的方式完全可以使用‘ exports.xxx=xxx ’。当一个模块需要导出单个成员时,这个时候必须用‘ module.exports=xxx ’ 使用‘exports=xxx ’ 不管用,因为每个模块最终向外‘ return ’ 的是 ‘ module.exports ’,而exports只是module.exports的一个引用,所以即便为‘ exports=xxx ’重新赋值,也不会影响‘ module.exports ’ ,并且如果重新赋值以后,exports和module.exports之间的引用关系会断裂。但是有一种赋值方式比较特殊,‘ exports=module.exports ’ 这个是用来重新建立引用关系的。
4.require方法加载规则
①优先从缓存加载:可以避免重复加载,提高加载效率
②判断模块标识:require(‘ 模块标识 ’)
- 如果是路径形式的模块:
- 如果是核心模块:
- 如果是第三方模块:
③第三方模块的加载规则解释(参考文章:深入浅出Node.js)
Nodejs中的模块系统的更多相关文章
- Nodejs中关于模块的总结
关于Nodejs中的模块 概念 Nodejs在ECMAScript的基础上扩展并封装了许多高级特性,如文件访问.网络访问等,使得Nodejs成为一个很好的Web开发平台.基于Nodejs这个平台将We ...
- javascript中的模块系统
目录 简介 CommonJS和Nodejs AMD异步模块加载 CMD ES modules和现代浏览器 在HTML中使用module和要注意的问题 简介 在很久以前,js只是简单的作为浏览器的交互操 ...
- Nodejs中cluster模块的多进程共享数据问题
Nodejs中cluster模块的多进程共享数据问题 前述 nodejs在v0.6.x之后增加了一个模块cluster用于实现多进程,利用child_process模块来创建和管理进程,增加程序在多核 ...
- 在nodejs中引进模块要经历的步骤
在nodejs中引入模块需要经历如下3个步骤 1.路径分析 2.文件定位 3.编译执行 在nodejs中模块分为两类,一类是nodejs提供的模块,称为核心模块,另一类的用户编写的模块,称为文件模块. ...
- node (02 CommonJs 和 Nodejs 中自定义模块)顺便讲讲module.exports和exports的区别 dependencies 与 devDependencies 之间的区别
CommonJS 规范的提出,主要是为了弥补当前 JavaScript 没有标准的缺陷.它的终极目标就是:提供一个类似 Python,Ruby 和 Java 语言的标准库,而不只是停留在小脚本程序的阶 ...
- Node.js学习笔记(二) --- CommonJs和Nodejs 中自定义模块
一. 什么是 CommonJs? JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器. 然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用程序.并没有制定一 ...
- Node中的模块系统
加载require var 自定义变量名称 = require('模块') 两个作用: 执行被加载模块的代码 得到被加载模块中的exports导出接口对象 导出exports node中是模块作用域, ...
- NodeJS中Buffer模块详解
一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一 ...
- TypeScript完全解读(26课时)_14.ES6和Nodejs中的模块
创建modules文件夹,我们的文件都写在这里面 modules下面新建index.js文件,在index.ts内引入这个js文件 es6的模块 最主要的两个关键字 import和export imp ...
随机推荐
- IDEA 2019 快捷键终极大全
常用的有fori/sout/psvm+Tab即可生成循环.System.out.main方法等boilerplate样板代码 . 例如要输入for(User user : users) 只需输入use ...
- 四种方法获取可执行程序的文件路径(.NET Core / .NET Framework)
原文:四种方法获取可执行程序的文件路径(.NET Core / .NET Framework) 本文介绍四种不同的获取可执行程序文件路径的方法.适用于 .NET Core 以及 .NET Framew ...
- 如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来
原文:如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来 title: "如何追踪 WPF 程序中当前获得键盘焦点的元素并显示出来" publishDate: 2019-06 ...
- java之spring之helloword
这篇文章主要讲 spring的基础的使用案例 项目整体目录结构: 1.新建一个java项目:spring_helloworld 2.在项目下创建一个lib文件夹,并把一些必须的jar包复制过去 新建l ...
- 为什么UDP有时比TCP更有优势?
随着网络技术飞速发展,网速已不再是传输的瓶颈,UDP协议以其简单.传输快的优势,在越来越多场景下取代了TCP.1.网速的提升给UDP稳定性提供可靠网络保障 CDN服务商Akamai(NASDAQ: A ...
- pandas-11 TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely错误解决方法
pandas-11 TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be sa ...
- 工厂交接班易出问题?MES系统实现精准对接
工厂交接班制度非常的严格和复杂,而MES系统能让繁琐的交接班流程简单快捷无措.MES系统在发生事件时记录传递事件,还可以主动对事件进行分类和报告.人员可以查看和深入到以前或当前班次的个别事件. 随着工 ...
- suoermap的object.net循环遍历属性表,从数据库取数据进行更新属性字段值
/// </summary> /// <param name="sName">图层名</param> /// <param name=&q ...
- VLAN实验4:利用单臂路由实现VLAN间路由
单臂路由: 实验环境: 实验拓扑图: 实验编址: 实验步骤:1.创建VLAN并配置Access.Trunk接口. 我们在S2上创建VLAN10和VLAN20,并且吧链接PC1的E0/0/1和链接PC2 ...
- git及github使用
1.git安装 widows: 可以去git官网下载安装 ubantu : 使用命令 sudo apt-get install git 进行安装 2.git启动 widows: 首先去到需要建立git ...