本文同步自 JSCON简时空 - 技术博客,点击阅读
【因视频没法在本文播放,可前往 技术博客原文 查阅】html
今天要学习的是 Node.js 的 tips,是关于 require.main === module
这个条件判断语句的用处。前端
先了解两个前提知识:node
require.main
会被设为该文件模块的 module
变量。module
表示指向当前模块的变量对象(能够理解成某种意义上的 this
变量);注意 module
并非全局对象,是局部变量。这意味着能够经过 require.main === module
来判断一个文件是否被直接运行。git
Node.js 官网 “Accessing the main module” 中有言:github
简单翻译一下就是:
能够经过 require.main === module
来判断当前文件是否直接被 node.js 执行,好比对 foo.js
文件,若是你执行了 node foo.js
,那么这个条件语句结果是 true
,若是是被其余文件以 require('./foo')
引用则为 false
编程
咱们写一个简单的例子来理解,好比咱们写一个 plus.js
文件,里面提供了 plus
函数来实现 加法 的功能:api
// plus.js function plus(a, b) { return a + b; } module.exports = plus;
咱们想要快速简单测试该 plus
功能,因此添加一行测试语句放在文末:微信
// plus.js ... module.exports = plus; // 新增一行语句测试 plus 函数功能 console.log('plus: 1 + 2 = ', plus(1, 2));
此时咱们直接执行 node plus.js
的确会输出 plus: 1 + 2 = 3
语句,达到咱们测试的目的。函数
不过这样会存在存在一个问题,当正常状况下咱们另外一个模块 main.js
去引入该 plus.js
文件后,咱们去执行 main.js
文件也会执行这条测试代码 —— 很显然这不是咱们所想要的。oop
此时这个 require.main === module
判断语句就派上用场了:
// plus.js ... module.exports = plus; // 使用该判断语句 if(require.main === module) { console.log('plus: 1 + 2 = ', plus(1, 2)); }
这样其余模块引入当前 plus.js
模块后就不会执行这条测试语句了。
本例代码可前往 这儿 获取
该技巧常常用在代码演示中(或者自测),好比我最近正在看 loopback-next/context example 代码 中的每一个 js 文件文末最后都会有这样的代码:
这就是为了方便测试该模块功能,同时也不影响被其余模块引用。
“前端Tips”专栏,隶属因而 JSCON 专栏系列,设计初衷是快速获取前端小技巧知识,取材普遍,涵盖前端编程诸多领域。设计初衷是快速消费类知识,因此每一个 tips 阅读耗时大约 5 分钟。为方便读者在不一样场合阅读,每篇 tips 配有视频、音频和文字,挑本身喜欢方便的就行。
有两种方式获取历史 tips:
① 在公众号内回 "tips" +"期号" 就能够。例如:回复 “tips25” 便可获取第25期 tips
② 前往网站:https://boycgit.github.io/fe-...,里面提供了搜索功能
欢迎你们关注个人知识专栏,更多内容等你来挖掘