node.js中的module模块

HTML入门(详细教程),前端入门从这里开始 HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。 阅读详情

模块模式

我们把每一个 .js 文件都视为一个 模块,模块内部有自己的作用域,不会影响到全局。并且,我们约定一些关键词来进行依赖声明和 API 暴露。在js中有几种用于实现模块的方法和规范:

  • 对象字面量表示法
  • Module模式

以下是一些模块化规范,括号内为对应的脚本加载器

  • CMD(SeaJS)
  • AMD(RequireJS)
  • CommonJS(NodeJS)
  • ES6 Module (ECMAScript 2015)

比较有名模块化规范的是 CMD、AMD、CommonJS 和 ES6 Module,它们都是为了实现在浏览器端模块化开发的目的。前面两个规范分别来自 SeaJS 及 RequireJS,这两个规范现在基本已经很少人用了;CommonJS 由于是被 NodeJS 所采用的,所以很多人用;而 ES6 Module 自然是来自去年正式发布的 ECMAScript 2015 所采用的了,以后会逐渐成为最主要的模块化规范。

对象字面量

在对象字面量表示法中,一个对象被描述为一组包含在大括号中、以逗号分隔的名值对。

对象字面量不需要使用new操作符进行实例化。使用对象字面量有助于封装和组织代码,即将所有属性和方法封装在一个变量中。

var myModule = {
    //属性
    myProperty:"someValue",
    //一些用于配置的属性
    myConfig:{
        language:"English",
        useCaching:true
    },
    //基本方法
    Method:function(){
        console.log("test")
    },
    //用于输出配置的方法
    Method2:function(){
        console.log(this.myConfig.language);
    },
    //用于设置配置的方法
    Method3:function(newConfig){
        this.myConfig = newConfig;
        console.log(this.myConfig)
    }
}
myModule.Method();//test
myModule.Method2(); //true
myModule.Method3({
    language:"Chinese",
    useCaching:false
});//Object {language: "Chinese", useCaching: false}

Module模块模式

1、概念:用于进一步模拟类的概念,通过这种方式,能够使一个单独的对象拥有公有/私有变量和方法,从而构成自己的一个私有作用域,减少命名冲突的可能性。这样会解决两个问题:

     1)冲突:不同js文件中除非将所有的变量和函数用命名空间单独包起来,不然每一个js文件中定义的变量和函数都是全局的。可能存在命名等一系列的冲突;

     2)依赖:不同的js文件在加载时存在一定的先后顺序,这种先后取决于它们之间的依赖关系,有可能存在相互均存在依赖关系,无法决定加载顺序的情况

2、模块实例的require方法

我们都知道,当使用exports或者module.exports抛出一个模块,通过给require()方法传入模块标识符参数,然后node根据一定的规则引入该模块之后,我们就能使用模块中定义的方法和属性了。

node的模块引入规则:

1)注意引入的路径地址,如果模块的路径填写的是相对路径,那么加载的就是文件模块,如果填写的不是以相对路径开始的,那么就是文件夹模块。

2)所有需要引入的node模块应该统一都放到node_modules文件下,在同级文件目录下还会有一个pack.json文件(说明配置文件),里面会记载着一些配置信息,版本号等。

3)在package.json文件通过main选项可以指定模块的入口文件(主文件),那么通过require加载模块的时候,加载的就是该main指定的文件,node通过 require( ) 来加载模块。

3、module.exports    

module对象具有一个exports属性,该属性就是用来对外暴露变量、方法或整个模块的。当其他的文件require进来该模块的时候,实际上就是读取了该模块module对象的exports属性。

4、 exports对象

 exports和module.exports都是引用类型的变量,而且这两个对象指向同一块内存地址。在node中,二者一开始都是指向一个空对象的,exports对象是通过形参的方式传入的,直接赋值形参会改变形参的引用,但是并不能改变作用域外的值。代码如下:

var module = {
    exports: {}
}
var exports = module.exports
function change(exports) {
    //为形参添加属性,是会同步到外部的module.exports对象的
    exports.name = "lisi"
    //在这里修改了exports的引用,并不会影响到module.exports
    exports = {
        age:10
    }
    console.log(exports) //{ age:10}
}
change(exports)
console.log(module.exports) //{exports: {name: "lisi"}}

5、exports和module.exports区别总结:

1.exports只是module.exports的引用。

2.exports的生存周期是当前模块的执行时间,而module.exports生存周期则是当前程序的执行时间

3.require()返回的是 module.exports 而不是 exports

4.module.exports 初始值为一个空对象 {}

5.通过上面代码可以很清楚知道,开始实际上module.exports和exports是指向同一个对象,而this开始又是指向module.exports,所以开始都是空对象。之后开始对module.exports赋值,这里要注意了,我们使用的module,实际上是传进来的参数,是外面定义那个module对象的地址,现在我们对module.exports赋值,如此一来,module里面这个exports的地址指向已经变了,指向了另一块内存,而由于是值传递,this和exports保存的仍然是之前的内存地址,所以他们仍然为{}

AUTOSAR&UDS 理论要点及isolar实战-DEM模块 从这节开始,将讲解UDS诊断中非常重要的知识点:故障事件触发、故障信息上报、故障信息处理、故障信息存储和故障系统降级,后续会陆续更新。 阅读详情

相关推荐

别再手动算LLC了!用Mathcad 15分钟搞定谐振参数与增益曲线(附已验证产品案例)

本文详细介绍了如何利用Mathcad在15分钟内高效完成LLC谐振变换器的参数计算与增益曲线绘制。通过对比传统工具,突出Mathcad在自然数学表达、实时单位换算和动态参数关联方面的独特优势,帮助电源工程师大幅提升设计效率。文章还提供了已验证的产品案例和实用模板,助力工程师快速掌握谐振参数优化技巧。

weixin_42548888的博客 548

Node.js — 模块化

npm与包

bug_caicai的博客 1209

rk3399 hdmi HDCP key烧录

1.key转换 使用 hdcp\ProvisioningTool_20170526\KeyConverterV2.02 目录下的KeyConvertor.exe工具将1.4key进行转换 转换后得到 TX00000001.skf 文件,将 TX00000001.skf 文件烧录到开发板上,烧录方式: 打开文件 hdcp\ProvisioningTool_20170526\ProvisioningTool20170526\ProvisioningTool.exe 选择烧录方式与烧录路...

qq_32645109的博客 3859

NodeJS的module(模块系统)

Node.js 有一个简单的模块加载系统。 在 Node.js 中,文件和模块是一一对应的(每个文件被视为一个独立的模块)。 例子,假设有一个名为 foo.js 的文件: const circle = require('./circle.js'); console.log(`半径为 4 的圆的面积是 ${circle.area(4)}`); 在第一行中,foo.js 加载了同一目录下的 circle.js 模块。 circle.js 文件的内容为: const { PI } = Math; exp

qq_36801250的博客 2764

微处理器实验报告-实验四

实验四 可编程定时/计数器8253实验 一、实验要求 利用8086外接8253可编程定时/计数器,可以实现方波的产生。 二、实验目的 1、学习8086与8253的连接方法。 2、学习8253的控制方法。 3、掌握8253定时器/计数器的工作方式和编程原理

青竹小轩的博客 5112

告别双系统!用PhyFusion在麒麟V10上无缝融合Win11,文件互传、GPU加速全搞定

本文详细介绍了在飞腾D3000平台上使用PhyFusion实现麒麟V10与Win11无缝融合的解决方案。通过视觉无界、数据互通和性能无损的三大突破,PhyFusion显著提升了跨系统工作效率,支持GPU加速和文件互传,是国产化平台的革命性工具。

weixin_28707365的博客 1017

js模块模式(module)

一:对象自变量的方式定义模块模式 myModule={ myProperties:'pro', myConf:{ name:'name', age:25 }, method1:function(){ console.log('time1'); }, method2:function(){ console.log('t

worn_xiao的博客 761

FreeCAD MCP实战:用AI自然语言驱动CAD建模与自动化

在计算机辅助设计(CAD)领域,参数化建模和自动化脚本是提升设计效率的核心技术。其原理在于通过程序化指令控制三维模型的创建与修改,从而将设计意图转化为精确的几何实体。这种技术价值在于显著降低重复性操作成本,实现快速原型迭代和设计探索。在应用场景上,它尤其适用于需要频繁调整尺寸、生成系列化零件或执行规则化建模任务的工程与产品设计。本文聚焦的FreeCAD MCP项目,正是这一理念的先进实践。它通过集成Model Context Protocol(MCP),构建了一个连接Claude AI与FreeCAD的智能

weixin_26913055的博客 725

JS设计模式(一)-MODULE(模块模式)

JavaScript模块是用于保持代码块之间相互独立而普遍使用的设计模式。对于熟悉面向对象语言的人来说,模块是JavaScript的"类"。在JavaScript中Module模式模拟了类的概念,用闭包封装了"私有"状态和方法。 Module(模块)模式 通常能够帮助我们清晰地分离和组织项目中的代码单元 js中实现模块的方法 1》对象字面量表示法 2》Module模式 3》AMD模...

一个有理想的小人物 9583

OpenCV实现物体尺寸的测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。

qq_53545309的博客 9157

用 Message Monitoring Overview 打造接口健康驾驶舱:SAP AIF 消息监控实战解析

究竟解决了什么痛点?概括起来,这个应用把SAP AIF的接口监控,从传统的事务码和技术视角,带到了一个更加直观、业务友好的层次:(通过卡片式总览,让你在一个页面上看到所有自己负责的接口及其健康状况。通过和的联动,实现了从接口态势到具体消息的快速钻取。通过Recipient模型和应用,实现了监控职责的灵活分配。借助拖拽排序、搜索过滤等特性,让每个运维人员都可以打造属于自己的接口健康 cockpit。如果你正在做S/4HANA或项目,无论是公有云还是本地部署,只要系统启用了SAP AIF。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 107

NodeJS中的Module

文章目录1 module概述1.1 module的简介1.2 module对象1.2.1 module.exports属性1.2.2 exports变量1.3 AMD规范与CommonJS规范的兼容性1.4 require命令1.4.1 基本用法1.4.2 加载规则1.4.3 目录的加载规则1.4.4 require.main1.5 模块的缓存1.6 环境变量NODE_PATH1.7 模块的循环加...

上善若泪 3809

在RV1126上实现人脸识别----MobileFaceNet转成rknn模型

目录 1.模型下载 2 转成rknn模型并推理 3 查看网络模型 1.模型下载 首先下载MobileFaceNet的模型,github下载地址为:https://github.com/sirius-ai/MobileFaceNet_TF/tree/master/arch/pretrained_model/ 2 转成rknn模型并推理 import numpy as np import cv2 from rknn.api import RKNN if __name__ == '__..

C/C++、嵌入式开发、深度学习算法、模型部署与推理优化 3527

Node JS 模块:Node.js module.exports 与 exports

当我们在 javascript 中构建大型应用程序时,我们希望将其拆分为多个文件,并为这些文件提供模块。为了在我们的应用程序中使用这样的模块,我们需要导出模块中存在的类或函数。因此,在本文中,我们将研究从模块导出函数或类的两种最常见方法,即 module.exports 和 exports。我们还将研究它们之间的差异,并了解哪种方式最适合给定的情况。我们先来了解一下 javascript 中的模块,可以把模块理解为一个文件,它封装了一块代码,方便应用的相关功能。

新华编程特战队 2577

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Node.js:模块化思想中一个Javascript文件分析以及exports 和 module.exports的区别

模块化思想中一个Javascript文件分析以及exports 和 module.exports的区别

KaiSarH 733

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Node.js 模块搜索路径增强工具——app-module-path

Node.js 模块搜索路径增强工具——app-module-path 1. 项目基础介绍 app-module-path 是一个为 Node.js 设计的简单模块,它能够帮助开发者将额外的目录添加到 Node.js 的模块搜索路径中。该项目主要由 JavaScript 语言编写,旨在为顶层应用程序模块提供更灵活的模块引用方式。 2. 核心功能 该模块的核心功能是允许开发者将特定目录添加到 Nod...

gitblog_00324的博客 782

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Node.js 的模块作用域和 module 对象详细介绍

Node.js 模块作用域与 module 对象介绍,了解 Node.js 模块如何独立运行,避免污染全局作用域。使用 module.exports 导出变量和函数,require() 导入模块,实现代码复用。示例展示如何定义私有与公开变量,保证模块封装性,提高代码维护性。适用于初学者学习 Node.js 模块机制,提高项目结构清晰度。

2402_84971234的博客 951

node.js中module模块的理解

node.js中使用CommonJS规范实现模块功能,一个单独的文件就是一个单独的模块。通过require方法实现模块间的依赖管理。 通过require加载模块,是同步操作。 加载流程如下: 1、找到需要加载的模块文件。 2、判断是否缓存过,如果没有,则读取模块文件的内容。 3、把读取到的内容,封装在一个函数里运行。 (function (exports, require, mod...

weixin_34405354的博客 102

node.js 模块中 exports 和 module.exports 区别

Node应用由模块组成,采用CommonJS模块规范。 根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。 CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports...

qq:489366879 224

Node.JS(4)--模块、exports和module

在node中有一个全局对象global,它的作用和网页中window类似

m0_62520946的博客 776

app-module-path-node: 提升Node.js模块路径管理的利器

app-module-path-node: 提升Node.js模块路径管理的利器 项目介绍 app-module-path-node 是一个轻量级却功能强大的npm模块,出自Patrick Steele-Idem之手。它扩展了Node.js的标准模块搜索逻辑,允许开发者自定义应用程序级别的模块加载路径,从而加强项目的可维护性和代码的复用能力。通过简易配置,可以将任何位于应用根目录的文件或目录设定...

gitblog_00885的博客 842

Node.js模块导出exports 和 module.exports 的区别

关于exports和module.exports的关系可以总结为 1. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {} 2. exports 是指向的 module.exports 的引用 3. require() 返回的是 module.exports 而不是 exports

lxy的学习笔记 1万+

Node.js 模块化 module.exports 和 exports 的使用

Node.js 模块化 module.exports 和 exports 的使用

yezhihaobk的博客 2万+

node.js模块化(module.exports/exports/require)

export、export default、import作用和区别 首先export、export default作用均为导出文件中的某一变量、函数、对象等,导出之后你可以在任意需要的地方在文件的头部通过import命令进行导入,进而对其导出的方法变量进行使用,以达到代码封装、复用的功能。 区别点: 1、导出时:使用export命令导出的格式为 export {test1, test2},可以导出...

Mr_JiaTao的博客 1874

node.js 模块(exports、module.exports、require)

1. Node.js中模块的分类 核心模块(已经封装好的内置模块) 自定义模块 第三方模块(npm下载下来的) 2. Node.js中模块化开发规范 Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到 模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块。 3. exports 和 module.exports 的关系以及注意点 4. 模块初始化规则

来杯卡布奇诺的博客 676

java加载node模块,Node.js模块加载过程module.js源码阅读

引言nodejs中以模块来组织代码,加载模块是怎样的一个过程呢?require又是怎么在运作?模块nodejs中以模块为最小单位来组织代码,类似于Java中的package概念,而在nodejs中要搞清楚模块,就要搞清楚模块是怎么样加载的。源码分析我们都知道加载一个模块是使用require函数来实现的,那么先从require函数下手。1.Module.prototype.require我们从mod...

weixin_35763055的博客 237
上一篇: node.js中setTimeOut(),setInterval(),setImmediate()以及process.nextTick()区别
下一篇: node.js中的stream模块
晶球
博客等级 码龄9年 4粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值