前端Tips01 - require.main 只用一條判斷語句,輕鬆回答模塊的 「從哪裏來?到哪裏去?」

本文同步自 JSCON簡時空 - 技術博客,點擊閱讀

title

視頻講解

【因視頻沒法在本文播放,可前往 技術博客原文 查閱】html

文字內容

一、本期 Tip 內容

今天要學習的是 Node.js 的 tips,是關於 require.main === module 這個條件判斷語句的用處。前端

先了解兩個前提知識:node

  1. 當 Node.js 直接運行一個文件時,require.main 會被設爲該文件模塊的 module變量。
  2. 在每一個模塊裏面, module 表示指向當前模塊的變量對象(能夠理解成某種意義上的 this 變量);注意 module 並非全局對象,是局部變量。

這意味着能夠經過 require.main === module 來判斷一個文件是否被直接運行。git

Node.js 官網 「Accessing the main module」 中有言:github

Node.js 官網對 require.main 的解釋

簡單翻譯一下就是:
能夠經過 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 文件文末最後都會有這樣的代碼:

require.main

這就是爲了方便測試該模塊功能,同時也不影響被其餘模塊引用。

三、參考文章

關於 「前端Tips專欄」

前端Tips」專欄,隸屬因而 JSCON 專欄系列,設計初衷是快速獲取前端小技巧知識,取材普遍,涵蓋前端編程諸多領域。設計初衷是快速消費類知識,因此每一個 tips 閱讀耗時大約 5 分鐘。爲方便讀者在不一樣場合閱讀,每篇 tips 配有視頻音頻文字,挑本身喜歡方便的就行。

有兩種方式獲取歷史 tips:

① 在公衆號內回 "tips" +"期號" 就能夠。例如:回覆 「tips25」 便可獲取第25期 tips
② 前往網站:https://boycgit.github.io/fe-...裏面提供了搜索功能

歡迎你們關注個人知識專欄,更多內容等你來挖掘

我的微信公衆號

相關文章
相關標籤/搜索