位置: IT常识 - 正文

CommonJS的理解(commonjs的特点)

编辑:rootadmin
CommonJS的理解 CommonJS是什么?

推荐整理分享CommonJS的理解(commonjs的特点),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:commonjs require,commonjs实现原理,commonjs requirejs,common.js是用来干嘛的,commonjs原理,commonjs原理,commonjs教程,commonjs教程,内容如对您有帮助,希望把文章链接给更多的朋友!

我们主流的前端框架vue/react都是基于node来构建的。在NodeJS出现之前,由于没有特别复杂的页面,前端是没有模块化这个概念的,而NodeJS诞生之后,它使用CommonJS的模块化规范。从此,js模块化开始快速发展。因此,我们知道,commonjs就是一个模块化的规范。目前流行的js模块化规范有CommonJS、AMD、CMD、UMD以及ES6的模块系统。

至于什么是模块化?你能看到这里说明你已经工作有点时间了,这个不需要太多的解释,自行领悟吧。小编文采不行,不知道怎么解释,简单来说,一般来说,一个文件就是一个模块,这个文件内的作用域唯一,可以向外暴露变量,函数等。模块化的出现减少了代码的繁琐,利于代码复用和日后维护等等作用,实在高明!

前面我们说过,NodeJS是使用CommonJS的模块化规范。CommonJS它有四个核心的比较重要的环境变量,分别是modele, exports,require,global.  

modele, exports

如果你有一定的工作经验,那么你一定见过如下代码:

module.exports = {//...............}以及var math = require('XXXX');

module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口,不建议直接使用exports(为什么呢?只能说不熟悉的容易出错,而且使用不方便)。然后我们在其他模块需要引入的地方使用require来引入。

module.exports和exports都能导出,那么究竟这两个之间有什么不同的呢?

exports 导出实际还是使用了module.exports。因为node在内部对exports进行了赋值。

var exports = module.exports;

exports在导出的时候,需要添加属性或者方法,因为它指向的是module.exports,module.exports变量本就是一个对象,实际导出也是导出这个变量。不可以直接给exports赋值一个变量或者函数,这是错误的。。。

exports = '我是错误的导出';//错误的exports = function(){ }; //错误的

正确的是这样:

exports.XXX = '我是错误的导出';//正确的exports.XXX = function(){ }; //正确的CommonJS的理解(commonjs的特点)

看到这里你应该知道为什么不建议使用exports暴露了吧!!

补充下,modules对象都有哪些属性:

module.id,模块的识别符,通常是带有绝对路径的模块文件名;module.filename,模块的文件名,带有绝对路径;module.loaded,返回一个boolean值,表示模块是否已经完成加载;module.parent,返回一个对象,表示调用该模块的模块;module.children,返回一个数组,表示该模块内用到的其他模块;module.exports,表示模块对外输出的值; require

require就是加载模块的。所有加载的模块都会缓存保存在require.cache中。

使用require加载模块的时候,必须加 ./ 路径,不加的话只会去node_modules文件找。

// 引用自定义的模块时,参数包含路径,可省略.jsvar math = require('./math');// 引用核心模块时,不需要带路径var http = require('http');

这里了解下require使用时候的内部处理流程:

1.在执行到require语句的时候,先检查是否存在这个模块的缓存;

2.如果没找到缓存,那么就会创建一个新的module实例,并且缓存下exports导出的值。如果没发现exports的模块那么会报错;

3.如果缓存存在的话,执行module.load()这个方法,去加载这个模块,读取文件内容后,使用module.compile()执行文件代码;

4.如果解析的过程中,出现异常,就从缓存中删除这个模块;

5.如果没有出现异常,最后返回这个模块的module.exports;

global

global对象是nodejs的全局对象,上边挂在了一些最基本的全局方法。

CommonJS模块的缓存

从require引入我们使用了缓存。当我们第一次加载模块的时候,node会加载他并且缓存下来,之后使用的时候就会直接从缓存内读取module.exports的值。缓存是根据绝对路径识别模块的,如果同样的模块名,但是保存在不同的路径,require命令还是会重新加载该模块。所以加载模块只会在第一次,后面如果需要重新加载可以通过清除缓存。

CommonJS的缺点

首先我们需要了解CommonJS的加载方式是同步加载的,这意味着只有前面执行完成才会继续执行。因为同步就会存在一个问题,加载的速度受到影响。Node.js主要用于服务器编程,模块文件一般都已经存在于本地硬盘,所以加载起来比较快,不用考虑非同步加载的方式,所以CommonJS规范比较适用。但是,如果是浏览器环境,要从服务器端加载模块,这时就必须采用非同步模式,因此浏览器端一般采用AMD规范。

本文链接地址:https://www.jiuchutong.com/zhishi/299442.html 转载请保留说明!

上一篇:文心一言 VS ChatGPT,国产大模型和国外的差距有多大?(文心一言 VS ChatGPT)

下一篇:终于,OpenAI开放ChatGPT API,成本直降90%,百万token才2美元(open开放的意思吗)

  • iqoo8怎么关闭5g(iqoo8怎么关闭夜景)

    iqoo8怎么关闭5g(iqoo8怎么关闭夜景)

  • 红米k40防水吗(红米k40手机防水吗?)

    红米k40防水吗(红米k40手机防水吗?)

  • 华为nova5可以敲两下截屏吗(华为nova5敲击截屏在哪设置)

    华为nova5可以敲两下截屏吗(华为nova5敲击截屏在哪设置)

  • 台式电脑没麦怎么说话(台式电脑没麦怎么调?)

    台式电脑没麦怎么说话(台式电脑没麦怎么调?)

  • 抖音视频为什么不能分享到微信(抖音视频为什么会自动消失)

    抖音视频为什么不能分享到微信(抖音视频为什么会自动消失)

  • 电脑显示屏分辨率怎么调(电脑显示屏分辨率多少最好)

    电脑显示屏分辨率怎么调(电脑显示屏分辨率多少最好)

  • 怎样微信分身登录(请问微信分身怎么登录?)

    怎样微信分身登录(请问微信分身怎么登录?)

  • 苹果se2搭载5g吗(苹果手机se2支持5g吗)

    苹果se2搭载5g吗(苹果手机se2支持5g吗)

  • 快手大屏版怎么设置(快手大屏版怎么取消)

    快手大屏版怎么设置(快手大屏版怎么取消)

  • 微信群里抢红包行为异常怎么解除(微信群里抢红包怎么才能抢到最佳)

    微信群里抢红包行为异常怎么解除(微信群里抢红包怎么才能抢到最佳)

  • 台式电脑没有蓝牙怎么安装(台式电脑没有蓝牙功能怎么连接蓝牙)

    台式电脑没有蓝牙怎么安装(台式电脑没有蓝牙功能怎么连接蓝牙)

  • 抖音需要认证吗(抖音认证需要身份证吗)

    抖音需要认证吗(抖音认证需要身份证吗)

  • 苹果11微信有办法美颜吗(苹果11有微信锁吗)

    苹果11微信有办法美颜吗(苹果11有微信锁吗)

  • 多媒体的4个基本特征(多媒体的六种基本元素)

    多媒体的4个基本特征(多媒体的六种基本元素)

  • 苹果11支持双卡嘛(苹果11支持双卡不)

    苹果11支持双卡嘛(苹果11支持双卡不)

  • ipad怎么同步手机照片(iPad怎么同步手机QQ聊天记录)

    ipad怎么同步手机照片(iPad怎么同步手机QQ聊天记录)

  • 智慧团建错了怎么改(智慧团建填错了可以撤销吗)

    智慧团建错了怎么改(智慧团建填错了可以撤销吗)

  • imessge已送达是不是对方就收到了

    imessge已送达是不是对方就收到了

  • xs是不是双卡(苹果xsmax可以双卡吗)

    xs是不是双卡(苹果xsmax可以双卡吗)

  • 夏普打印机驱动安装(夏普打印机驱动下载官网是什么)

    夏普打印机驱动安装(夏普打印机驱动下载官网是什么)

  • 酷派怎么恢复出厂设置(酷派手机怎么恢复出厂设置视频教程)

    酷派怎么恢复出厂设置(酷派手机怎么恢复出厂设置视频教程)

  • 苹果手机怎么开游戏模式(苹果手机怎么开定位)

    苹果手机怎么开游戏模式(苹果手机怎么开定位)

  • 华为p30的一键锁屏在哪里设置(华为p30一键锁屏怎么找出)

    华为p30的一键锁屏在哪里设置(华为p30一键锁屏怎么找出)

  • 小红书是腾讯旗下的吗(小红书是属于腾讯旗下的吗)

    小红书是腾讯旗下的吗(小红书是属于腾讯旗下的吗)

  • 芒果tv怎么开弹幕(芒果tv怎么开弹窗)

    芒果tv怎么开弹幕(芒果tv怎么开弹窗)

  • 微信小程序 slot插槽基本使用(微信小程序slot)

    微信小程序 slot插槽基本使用(微信小程序slot)

  • 未取得房屋产权证租赁
  • 水利建设专项资金收入优惠政策
  • 报关单保费000/0.1/1
  • 发票旁边的孔能撕吗
  • 分包抵扣
  • 转让不动产增值税计算
  • 企业注销清算方案
  • 收回应收账款的方法
  • 企业房产税怎么申报缴纳
  • 养老基金利率多少
  • 房产税从租计征的税率是12%还是4%
  • 当月进项税额大于销项税额
  • 消费税的计税方法
  • 收就业局稳岗补贴做账
  • 债转股企业所得税资本公积
  • 分配辅助生产车间成本记账凭证
  • 货物运输代理服务税率
  • 公司是否可以开电子发票
  • 施工企业开专票还是开普票好
  • 税费种认定功能在哪里
  • 发票显示不抵扣什么意思
  • 资管产品征税
  • 印花税可以根据企业流水申报吗
  • 工会财务总结报告
  • 购买收益权如何缴税
  • 企业旅行社名字怎么取
  • 以产品抵债会计分录
  • 固定资产资产评估
  • 如果工地老板拖欠工资怎么办
  • linux is
  • 购入研发设备
  • 缴纳公积金个人部分会计分录
  • 研发费用的会计和税法的不同
  • 应收账款保理的作用有哪些
  • 什么是累计预扣预缴应纳税所得额
  • php技术和mysql怎么结合
  • 设备租赁费怎么入账
  • php运用
  • 货款收不回来了怎么做账
  • 钱进公账怎么转账给别人
  • 公司间代收款需要开票吗
  • 商誉 减值
  • 财务费用的具体内容
  • 应交税费年末有余额怎么处理
  • pandas遍历某一列将字符串转换为列表
  • 财务费用手续费在借方还是贷方
  • 企业进行材料清查盘点中盘盈的材料
  • 一般纳税人也会被税吗
  • 存货报废进项税转出分录
  • 建筑企业的安全生产许可证由谁颁发
  • 出口退税的发票是专票还是普票
  • 业务招待费属于管理费用吗
  • 非现金资产抵偿债务
  • 一般纳税人车辆租赁费的税率是多少
  • 金蝶软件版本号有哪些
  • mysql绿色版配置
  • win8 itunes
  • win10更新dx
  • centos6.5mini安装教程
  • window10 屏幕
  • win8.1笔记本
  • w10组策略
  • 硬盘分区win7怎么扩充c盘
  • linux arp -s
  • win10应用商店不好用
  • jq复制元素
  • 使用jquery实现的项目
  • 音乐播放音乐
  • js实现组件功能
  • android内核剖析代码
  • css placement
  • python数据结构教程
  • js展示
  • jquery基本语法
  • jQuery的 $.ajax防止重复提交的两种方法(推荐)
  • 安卓调用系统相机
  • js初级教程
  • 山东税务申报如何网上申报
  • 残疾人就业保障金怎么申报
  • 小规模纳税人土地税减免政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设