Node 中 CommonJS 规范

前端八股文-Node.js模块化规范,概念解读,自定义模块CMD,AMD,exports 和 module.exports 的区别CommonJS模块暴露和引入,基于浏览器端的实现举例 前端入门教程 阅读详情

CommonJS 是一个很大的规范 Node 和浏览器只是借用了它的一部分精华

先来Node环境运行的结果:

# a.js

console.log('我是a.js')

无引用的情况:

# b.js

const lib = require('./a')
console.log('我是b.js')

# 运行b.js

我是a.js
我是b.js

有引用的情况:

# b.js

const lib = require('./a')
console.log('我是b.js',lib)

# 运行b.js

我是a.js
我是b.js {} //得到一个空对象

有 exports 情况,通过 exports 定义模块的输出:

# a.js

exports.hello='world!' // 这里可以挂载合法的数据类型,对象、字符串、函数等
console.log('我是a.js')

# b.js

const lib = require('./a')
console.log('我是b.js',lib)

# 运行b.js

我是a.js
我是b.js { hello: 'world!' } //得到一个含有 key 的对象 `key` 就是挂载到 `exports` 上的属性名

b.js require 的引用和 a.js exports 的引用是不是同一个引用?

# a.js

exports.hello='world!'
console.log('我是a.js')
setTimeout(()=>{
  console.log(exports)
},1000)

# b.js

const lib = require('./a')
console.log('我是b.js',lib)
lib.addNewProperty = '我是b.js中新增加的属性'

# 运行b.js

我是a.js
我是b.js { hello: 'world!' }

# 一秒后输出 说明  exports 导出的引用和 require 得到的引用是同一个引用
{ hello: 'world!', addNewProperty: '我是b.js中新增加的属性' } 

如果直接导出一个函数该怎么办? exports.function?

a.js

exports.hello='world!'

console.log('我是a.js')

module.exports = function test(){
  console.log('我是a.js导出的function')
}
b.js

const lib = require('./a')
console.log('我是b.js',lib)
lib.addNewProperty = '我是b.js中新增加的属性'
console.log(lib.hello)
console.log(lib)

# 运行b.js

我是a.js
我是b.js function test(){
  console.log('我是a.js导出的function')
}
undefined // 拿不到 exports 的引用 

// addNewProperty 挂载到了 module.exports 上
{ [Function: test] addNewProperty: '我是b.js中新增加的属性' } // module.exports 会覆盖 exports 的内容 

Node 中 ES6 模块和 CommonJS 采用各自的加载方案。

CommonJS 模块的输出都定义在 module.exports 这个属性上面。Node 的 import 命令加载 CommonJS 模块,Node 会自动将module.exports 属性当作模块的默认输出,即等同于 export default xxx

前端可以借助 Webpack 利用 CommonJS 的规范书写代码,Webpack 会把所有的 CommonJS 分析一遍然后生成一个大的 js,所有的文件成为一个对象{./index.js:(function(modeule,exports,__webpack_require__){文件内容}}),./xxx.js:(function(modeule,exports){文件内容}}) 通过这种形式为每个文件创建了一个作用域。

  • CommonJS
    // a.js
    module.exports = {
        foo: 'hello',
        bar: 'world'
    };
    
    // 等同于
    export default {
        foo: 'hello',
        bar: 'world'
    };
    

总结

  • 改变 require 的对象原对象也会受影响(值引用)
  • exports 的 require 的 js 默认的是一个空对象,对象里面可以有函数
  • exports 通过 exports.xx 导出对象,所有的导出都挂载exports这个对象上,require输入默认的是一个空对象,通过这种方式定义一个对象的输出
  • modules.exports可以直接导出一个函数
  • exports和 module.exports同时存在时只会导出 module.exports的内容,会覆盖exports
  • import 输出的是值得引用(复制一份地址)
node篇 CommonJS规范 开启nodejs介绍的专栏,今天讲述commonjs的规范,nodejs就是commonjs的实现 阅读详情

相关推荐

Node.js和CommonJs模块化的介绍、引入及使用

一、概念 1、什么是 CommonJs JavaScript是一个强大的面向对象语言 它有很多快速高效的解释器 然而 JavaScript标准定义的API只是为了构建基于浏览器的应用程序 并没有制定一个用于更广泛的应用程序的标准库 CommonJS规范的提出主要是为了弥补当前JavaScript没有标准的缺陷 它的终极目标就是:提供一个类似Python 或 Ruby 或 Java语言的标准库 而不只是停留在脚本程序的阶段 用CommonJS API编写出的应用 不仅可利用JavaScript来开发客户端应用 还可编写如下应用: 服务器端JavaScript应用程序(即NodeJs) 命令行工具

【Nodejs】nodejs模块化规范:CommonJS

nodejs模块化规范:CommonJS

DomCode 596

【硬件设计】_基于STM32单片机的智能台灯系统

智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。

2401_85381181的博客 1732

【Node】CommonJs(cjs)

# CommonJs - CommonJs 是 Node 的模块化规范 - 在 Node 中,每个文件都是独立的模块 - 在 Node 中,有一个全局**对象** global (与网页中的 window 类似) 全局作用域下创建的变量,会成为 global 的属性 全局作用域下创建的函数,会成为 global 的方法 - 模块内的变量不在全局作用域中,模块存在自己的作用域(相当于在一个函数内),所以不能随意调用模块之间的变量 ```js let num = 0; console.log(nu

Superman_H的博客 2053

Metal 一、初识 Metal 及其语言规范

游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。1图形渲染;2高并发计算。苹果文档给出的 Metal 优化:CPU 低消耗、GPU 高利用、连续处理器并行、有效的资源利用Metal 官方文档。

irainsa的博客 1220

MTK-Display技术解析:从MDP到DDP的架构演进

本文深入解析了联发科(MTK)显示技术从MDP到DDP的架构演进。MDP作为多媒体数据预处理中心,负责格式转换与缩放;而DDP则整合了OVL、COLOR、AAL等模块,并引入CMDQ与场景化模式,实现了从分散处理到统一智能调度的飞跃,旨在提升画质、流畅度并降低功耗。

weixin_29218509的博客 255

nodejs-commonjs模块化、异步、核心库

node模块化:common.js。异步编程风格:回调、promise、async/await。node核心模块:events、fs、stream、http。

qq_37987033的博客 397

什么是无人机电源管理模块?电源管理模块有什么用处?

我来描述一下我的问题情景,电源管理模块的定义是,这里给出这个PX4官方对于电源管理模块的一些介绍,补充一下锂电池的放电原理大家就可以更好理解为什么需要电源管理模块

HRWVY0725的博客 2273

深入理解 Node.js 模块化(CommonJS):原理、用法与避坑指南

虽然现在 Node.js 也支持 ES Modules,但是掌握 CommonJS 仍然是 Node.js 开发者的必备技能!

weixin_44732078的博客 1361

Springboot信息泄露以及heapdump的利用

努力是为了不平庸~安全有些时候是枯燥的,这一次,让我们先人一步,趣学渗透!

LiBai'S BLOG 3万+

UE5Could not be compiled. Try rebuilding from source manually.

UE5Could not be compiled. Try rebuilding from source manually.

weixin_45417260的博客 2770

【Node.js】CommonJS 模块化规范详解

CommonJS 是一套为 JavaScript 提供模块化支持的规范,它最初的目标是为服务器端 JavaScript 提供模块化机制。Node.js 采用了 CommonJS 作为其模块系统的基础,帮助开发者更好地组织代码,避免命名冲突,同时支持模块重用。CommonJS 是 Node.js 的核心模块化规范,提供了简单易用的模块导入导出方式。虽然随着 ES Modules 的普及,前端领域逐渐转向使用 ESM,但在服务器端开发中,CommonJS 依然占据重要地位。

lph159的博客 3556

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 408

node.js的模块化 与 CommonJS规范

在node.js中,模块化是指把一个大文件拆分成独立并且相互依赖的多个小模块,将每个js文件被认为单独的一个模块;模块之间是互相不可见的,如果一个模块需要使用另一个模块,则需要使用指定的语法来引入模块,并且只能引入模块所暴露的内容。将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化。编码是按照模块一个一个编码的,整个项目就是一个模块化的项目。二、node.js的模块化初体验。一、node.js的模块化。(2)什么是模块化项目?(1)什么是模块化?(3)模块化的好处?

2301_76669854的博客 843

使用epiDisplay包中的logistic

其中的logistic.display函数可以用于获取逻辑回归模型的汇总统计信息,包括自变量的优势比和置信区间,以及回归系数的Wald检验的p值。最后,我们使用print函数打印出汇总统计信息。使用epiDisplay包中的logistic.display函数获取逻辑回归模型的汇总统计信息(包括自变量的初始和调整后的优势比及置信区间,回归系数的Wald检验的p值)- R语言。通过使用logistic.display函数,我们可以方便地获取逻辑回归模型的重要统计信息,并对自变量的影响进行解释和推断。

CyberJolt的博客 608

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

前端基础-Node模块化及CommonJS规范

第4章 Node模块化及CommonJS规范 通过前面几个章节的学习, 我们基本掌握了NodeJS编程的基础知识, 但是我们也直观的发现了一个问题,和我们之前学习浏览器编程时JS, 差异还是很大的; 都是JavaScript编程, 为何有这种差异? 前面写过的防Apache服务器的案例中, 使用过内置fs模块, 使用过 moment 模块, 而这些模块都不是我们写的, 都是直接拿过来使用, 那么我...

逍遥云恋 585

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Node中对CommonJS模块规范的实现

一、首先了解一下CommonJS的模块规范 1.模块引用    在CommonJS规范中,存在require( )方法,它接受一个模块标识,用来引入一个模块中API 2.模块定义    既然在模块中有require( )方法来引入外部模块,那么也存在某

LeslieYoung的技术博客 1975

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Node.js 中的 CommonJS 模块化规范

CommonJS 是一种 JavaScript 模块化规范,旨在解决 JavaScript 中模块导入、导出和依赖管理的问题。它被广泛应用于 Node.js 中,虽然也有其他模块化规范(例如 ES6 的importexport),CommonJS 仍然是 Node.js 中的标准。模块化的导出:每个文件就是一个模块,可以通过导出模块的公共接口。模块化的导入:可以通过require()函数加载模块并使用其导出的内容。同步加载。

m0_62599305的博客 920

node环境与CommonJS规范

1. 环境 首先,我们来了解一下nodejs执行起来主要需要什么 CommonJS commonjs是nodejs所用的模块规范 global对象 我们知道在浏览器中运行的JavaScript包含BOM、DOM,其中window就是一个全局对象,但是nodejs并没有BOM、DOM这些东西,所有也没有window这个全局对象,取而代之的是global,同样里面也有一些属性和方法供我们使用。...

weixin_33721344的博客 442

js 多个定时器_Node.js系列深入浅出Node模块化开发——CommonJS规范

前言本文将为大家透彻的介绍关于Node的模块化——CommonJS的一切。看完本文可以掌握,以下几个方面:什么是模块化,以及没有模块化会带来哪些问题,是如何解决的;JavaScript的设计缺陷;CommonJS规范;它的规范特性;如何配合Node完成模块化开发;exports如何导出的;module.exports是如何导出变量的,值类型和引用类型导出间的差异;从内存角度深度分析mod...

weixin_40007668的博客 165

Node.js-COMMONJS 规范

ECMAScript 标准的缺陷 没有模块系统 标准库较少 没有标准接口 缺乏管理系统 模块化 如果程序设计的规模达到了一定程度,则必须对其进行模块化 。 模块化 可以有多种形式,但至少 应该 提供能够将代码分割为多个源文件的机制 。 CommonJS 的模块 功能可以帮我们解决该问题。 尚硅谷web前端培训_一家专业的web前端培训机构 HTML5 web前端 前端视频 尚硅谷比就业、拼课程、论口碑更给力 尚硅谷IT培训 立即咨询 CommonJS 规范 CommonJS 规范

zjjcchina的博客 1517

Node.js-CommonJS规范

CommonJS的介绍 CommonJS:是Node.js使用的模块化规范。也就是说,Node.js就是基于CommonJS这种模块化规范来编写的。 在 CommonJS 中,每个文件都可以当作一个模块: 在服务器端:模块的加载是运行时同步加载的。 在浏览器端: 模块需要提前编译打包处理。首先,既然同步的,很容易引起阻塞;其次,浏览器不认识require语法,因此,需要提前编译打包。 验证模块内变量都是局部变量 在node中有一个全局对象 global,它的作用和网页中window类似

qq_43812731的博客 413

node.js中模块化 CommonJS规范

在下图中变量1,函数1,数组就是模块内部的数据,在外部⽆法别访问到。在 Node.js 中,模块化是⼀种核⼼概 念,允许你将代码组织成可重⽤的模块,以便提⾼可维护性和代码复⽤性。模块定义:通过 module.exports 导出模块,通过 require 导入模块。模块标识:使用相对路径或者绝对路径来标识模块,确保模块的唯一性和可复用性。(2)每个 .js ⽂件,都是⼀个独⽴的模块,模块内的成员都是私有的。模块加载:使用同步加载模块的方式,确保模块的依赖关系得到正确的处理。

weixin_66340771的博客 451

Node-CommonJS 规范、模块作用域

模块化 为了解决文件之间的依赖,模块化是一种约定好的规范。 模块化规范是一种明文的约定,开发者都按照规范来写代码,减少沟通成本,极大的方便了各模块之间的相互调用。 一、 了解 CommonJS 规范 作用:是一套 Javascript 的模块化规范,规定了 模块的特性 和 各模块之间如何相互依赖; 用途:Node.js 中使用了 CommonJS 规范; 特点:同步...

xiaokanfuchen86的博客 418

Node.js相关——CommonJS规范

1. CommonJS规范产生背景 在后端,JavaScript的规范远远落后并且有很多缺陷,这使得难以使用JavaScript开发大型应用。比如: 没有模块系统 标准库较少 没有标准接口 缺乏包管理系统 CommonJS规范 的提出,主要是为了弥补JavaScript没有标准的缺陷。CommonJS API将通过定义处理许多常见应用程序需求的API来填补这一空白,最终提供与P...

weixin_33835103的博客 156

深入理解Commonjs规范及Node模块实现

本篇文章主要介绍了深入理解Commonjs规范及Node模块实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前面的话 Node在实现中并非完全按照CommonJS规范实现,而是对模块规范进行了一定的取舍,同时也增加了少许自身需要的特性。本文将详细介绍NodeJS的模块实现 引入 nodejs是区别于javascrip

程序达人 1353
上一篇: React+antd+Redux+Express+MongoDB实现通用后台管理系统
下一篇: React Hooks 速学
composurext
博客等级 码龄10年 15粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值