require的使用
require 用来加载一个文件的代码,关于 require 的机制这里不展开讲解,请仔细阅读 官方文档。
简单概括以下几点:
- require 可加载 .js、.json 和 .node 后缀的文件
- require 的过程是同步的,所以这样是错误的:
setTimeout(() => {module.exports = { a: 'hello' }
}, 0)
require 这个文件得到的是空对象 {}
- require 目录的机制是:
- 如果目录下有 package.json 并指定了 main 字段,则用之
- 如果不存在 package.json,则依次尝试加载目录下的 index.js 和 index.node
- require 过的文件会加载到缓存,所以多次 require 同一个文件(模块)不会重复加载
- 判断是否是程序的入口文件有两种方式:
- require.main === module(推荐)
- module.parent === null
循环引用
循环引用(或循环依赖)简单点来说就是 a 文件 require 了 b 文件,然后 b 文件又反过来 require 了 a 文件。我们用 a->b 代表 b require 了 a。
简单的情况:
a->b
b->a
复杂点的情况:
a->b
b->c
c->a
循环引用并不会报错,导致的结果是 require 的结果是空对象 {}
,原因是 b require 了 a,a 又去 require 了 b,此时 b 还没初始化好,所以只能拿到初始值 {}
。当产生循环引用时一般有两种方法解决:
- 通过分离共用的代码到另一个文件解决,如上面简单的情况,可拆出共用的代码到 c 中,如下:
c->a
c->b
- 不在最外层 require,在用到的地方 require,通常在函数的内部
总的来说,循环依赖的陷阱并不大容易出现,但一旦出现了,对于新手来说还真不好定位。它的存在给我们提了个醒,要时刻注意你项目的依赖关系不要过于复杂,哪天你发现一个你明明已经 exports 了的方法报 undefined is not a function
,我们就该提醒一下自己:哦,也许是它来了。
官方示例: https://nodejs.org/api/modules.html#modules_cycles
require的使用相关推荐
- Ubuntu16.04 pip3 install 报错 working_set.find(moduleOrReq) or require(str(moduleOrReq))[0]
1. 问题现象 Exception: Traceback (most recent call last):File "/usr/lib/python3/dist-packages/pip/b ...
- 微信小程序 require module exports 的使用
require any require(string path) 引入模块.返回模块通过 module.exports 或 exports 暴露的接口. 项目中使用 例如 const { post } ...
- php if require,php echo()和print()、require()和include()函数区别说明
简单总结echo()和print().require()和include()等易混淆函数的区别 1.echo和print的区别 PHP中echo和print的功能基本相同(输出),但是两者之间还是有细 ...
- PHP TP5框架 安装运行 Warning: require(E:\phpstudy_pro\WWW\TP5\tp5\public/../thinkphp/base.php): failed to
创建一个新的项目:进入项目的根目录执行 git 命令: 先执行 git clone -b 5.1 https://git.coding.net/liu21st/thinkphp5.git tp5 进入 ...
- node 模块化 require expores,简易实现原理。
为了更好的理解 Node.js 的 require 实现机制,我实现了一个简易的版本.我们node index.js的时候就是require('./index.js'),话不多说我们直接上代码: 目录 ...
- php include include_once 区别,「PHP」include()、include_once()、require()、require_once()的用法及区别...
1.include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会被引用并读取,当引用的文件发生错误时,系统只会给出个警告错误,而整个php文件会继续执行. ...
- 统一客服消息返回错误:{errcode:43004,errmsg:require subscribe hint: [9Vv08633952]}
2019独角兽企业重金招聘Python工程师标准>>> 公众号或者小程序发送客服消息错误: {"errcode":43004,"errmsg" ...
- include和require的区别
细节决定成败! 1.引用文件方式 对include()来说,在include()执行时文件每次都要进行读取和评估:而对于require()来说,文件只处理一次(实际上,文件内容替换了require() ...
- PHP 中 include 和 require 的概要及区别介绍
require() 语句的性能与 include() 相类似,都是包括并运行指定文件.不同之处在于:对 include() 语句来说,在执行文件时每次都要进行读取和评估:而对于 require() 来 ...
- Javascript模块化编程(三):require.js的用法
这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...
最新文章
- 华为程序员发现孩子不是自己的!怒提离婚!但老婆只要房子车子!不要孩子!绿他的竟然是个酒吧混混!...
- 前端基础——day1
- VTK:Utilities之DataAnimationSubclass
- hdu5909-Tree Cutting【FWT】
- jQuery插件素材网站
- java每个月某天,java – 查找一年中的某一天
- jQuery学习_具备吸附功能的拖曳框
- nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
- 单调栈-leetcode-739. 每日温度
- 从CAP 到编程语言的猜想
- 山寨抢购 Intel欲提高Atom处理器售价
- qt项目转Xcode项目(Xcode开发qt)
- 贷记、借记、来帐、往账的区别
- Web 3D渲染引擎HOOPS Communicator动画编辑器的使用 | HOOPS教程
- AD19 编译报错:has only one pin 和 floating net label
- 程序员的10大境界,计算科学的10层楼,比尔盖茨看了会自卑,牛顿看了会落泪!
- ETL工具之Informatica
- 音视频系列3:编解码技术
- TKE用户故事 | 作业帮检索服务基于Fluid的计算存储分离实践
- 【狂神说:秦疆老师】Spring5笔记
热门文章
- 利用python爬虫自动登录人人网
- 获取chrome80谷歌浏览器存储的指定网站Cookie数据方法详解
- 16. 如何修改 SAP ABAP OData 模型,使其支持 $expand 操作
- R数据分析:交叉滞后模型基础与实例解析
- 人工智能知识全面讲解:多层神经网络与误差逆传播算法
- [转]大量正版软件下载链接 1
- 港中文Adobe提出:开放式实体分割 Open-World Entity Segmentation
- parker 0104-00-0059-01
- 计算机excel计算If怎么算,Excel函数公式:关于SUMIF函数的那些事儿,全在此篇
- android小技巧(一) 格式化时间输出 简单的adapter PreferenceManager handler与 handlerThread