亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js中的CommonJS模塊化規(guī)范詳解

 更新時間:2023年02月06日 09:09:25   作者:昆吾kw  
這篇文章主要介紹了Node.js中的CommonJS模塊化規(guī)范,本文主要介紹了?CommonJS?規(guī)范在?Node?中的簡單應用,主要就是導入和導出模塊,需要的朋友可以參考下

nodeJS的介紹

NodeJS不但自己可以完成服務器軟件的功能,也不再需要php,asp,jsp等傳統的服務器語言
nodeJS可以解析JS代碼,而沒有瀏覽器安全級別的限制,因為,它的運行可以脫離瀏覽器的環(huán)境,而是在服務端運行;提供了很多系統級別的API,如:
文件的讀寫
進程的管理
網絡通信
NodeJS的包管理器npm,成為世界上最大的開放源代碼的生態(tài)系統。

CommonJS

上文提到了 Node 采用的模塊化規(guī)范是 CommonJS,它主要規(guī)定了如何定義模塊,如果導出模塊和如何導入模塊

  • 定義模塊:一個文件就是一個模塊
  • 導出模塊:通過 module.exports 導出模塊
  • 導入模塊:通過 require 方法導入模塊

為了方便使用模塊化,于是提供了幾個全局的方法或對象,分別是:

  • require:是一個方法,用來導入模塊
  • module:是一個對象,表示當前的模塊定義
  • exports:是 module.exports 對象的別名,存放了模塊要導出的內容
  • __dirname:獲取當前文件的絕對路徑
  • __filename:獲取當前文件絕對路徑和文件名稱

下面來看下這幾個對象和方法的使用。

模塊的導入和導出

首先準備一個目錄:

a.js 模塊導出內容:

const name = 'kw'

// 導出內容有幾種不同的方式:
// 方式1:模塊只導出變量 name
module.exports = name
// 方式2:模塊導出的是一個對象,包含一個 name 屬性
module.exports.name = name
// 等同于
exports.name = name

模塊要導出的內容是存放在 module.exports 中的,默認是一個空對象。

exportsmodule.exports 的別名,在導出內容時,切不可這樣做:

const name = 'kw'

exports = name

這里就是值類型與引用類型的區(qū)別的問題。將 exports 指向一個全新的值,就和原來的 module.exports 斷了聯系,此時模塊將導出默認的空對象。

idnex.js中,導入 a 模塊:

const a = require('./a')
// 方式1的結果:
console.log(a) // 'kw'

// 方式2的結果:
console.log(a) // {name: 'kw'}

模塊不止 .js

上面的示例中,我們所創(chuàng)建的模塊都是一個個的 .js 文件,這屬于文件類型的模塊。

文件不止一種類型,文件模塊也就不止一種。在 node 中的文件模塊有三種:

  • 后綴名為 .js 的文件
  • 后綴名 .json 的 json 文件
  • 后綴名為 .node 的經過編譯的二進制模塊文件

對不同文件后綴的模塊有不同的加載策略。對于 json 文件會調用 fs 模塊讀取后再用 JSON.parse 方法轉成 json對象;對于 .node 文件,不經任何處理,直接調用。

我們知道 Webpack 是一個模塊打包工具,它默認支持 CommonJS 規(guī)范。使用 Webpack 時,也會認為一個文件就是一個模塊。但比 CommonJS 規(guī)范更加豐富的是,不僅 .js 、.json 是模塊,任意一個文件都是模塊,比如 .png,.vue,.ts,但是這種模塊 Webpack 是“不認識”的,還需要安裝對應的 loader 去解析。

require 導入模塊的查找機制

按照來源劃分,在 Node 中一共有三類模塊,分別是:

  • 內置模塊:也叫核心模塊,由 Node 本身實現和提供的,比如 fs、httppath模塊
  • 自定義模塊:一般項目中自己寫的每一個 .js 文件都是
  • 第三方模塊:通過包管理工具 npm/yarn/pnpm 安裝到 node_modules 目錄下的模塊

require 方法在導入模塊時,會有一個查找的機制。

導入內置模塊

參數是一個模塊名。如果發(fā)現是內置模塊,則導入并結束查找。

const http = require('http')

導入自定義模塊

參數是一個文件路徑,以 ./ 、../ 或者 /開頭。

// 此時會當作內置模塊查找,自然是找不到的,會報錯
const a = require('a.js')

// 必須以 ./、 ../、 / 開頭
// 找到同級目錄下的 a.js 并導入
const a = require('./a.js')

如果模塊沒有帶后綴:

const a = require('./a')

會依次去找有沒有 a.js、 a.jsona.node,找到則導入模塊;沒有的話,會將 a 當作一個目錄名,去找 a 目錄下的 index.jsindex.json、 index.node,找到則導入模塊。如果還沒有找到,則報錯找不到模塊。

導入第三方模塊

參數是一個模塊名,并且不是核心模塊名。

通過包管理工具安裝一個模塊:

npm install dayjs
// src/index.js

// 發(fā)現 dayjs 不是內置模塊,首先會從當前模塊所在目錄的 node_modules 目錄下查找,找到后就結束查找。找不到則向上一級目錄查找,一直到系統的根目錄。
// 查找順序分別是:
/** 
    'c:\Users\taylo\Desktop\commonjs\src\node_modules',
    'c:\Users\taylo\Desktop\2022 掘金日新計劃 8月\commonjs\node_modules',
    'c:\Users\taylo\Desktop\2022 掘金日新計劃 8月\node_modules',
    'c:\Users\taylo\Desktop\node_modules',
    'c:\Users\taylo\node_modules',
    'c:\Users\node_modules',
    'c:\node_modules'
    在我們的目錄結構中,會從第二個路徑中找到,于是導入模塊,結束查找。
*/

const dayjs = require('dayjs')

console.log(dayjs(123456789123).format('YYYY-MM-DD hh:mm:ss')) // '1973-11-30 05:33:09'

小結

本文主要介紹了 CommonJS 規(guī)范在 Node 中的簡單應用,主要就是導入和導出模塊。

關于 CommonJS 規(guī)范更細節(jié)的講解,以及實現原理,會在后面的更文中談到,敬請期待。

到此這篇關于Node.js中的CommonJS模塊化規(guī)范的文章就介紹到這了,更多相關Node.js CommonJS模塊化規(guī)范內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Node.js基礎入門之回調函數及異步與同步詳解

    Node.js基礎入門之回調函數及異步與同步詳解

    Node.js是一個基于Chrome?V8引擎的JavaScript運行時。類似于Java中的JRE,.Net中的CLR。本文將詳細為大家介紹Node.js中的回調函數及異步與同步,感興趣的可以了解一下
    2022-03-03
  • Node.js中的文件系統(file system)模塊詳解

    Node.js中的文件系統(file system)模塊詳解

    Node.js文件系統模塊提供了豐富的方法,用于讀取、寫入、操作文件和目錄,文件系統模塊是Node.js強大而靈活的一部分,為文件操作提供了方便的API,本文給大家介紹Node.js中的文件系統(file system)模塊,感興趣的朋友一起看看吧
    2023-11-11
  • nvm mac 環(huán)境搭建過程

    nvm mac 環(huán)境搭建過程

    這篇文章主要為大家介紹了nvm mac 環(huán)境搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • nodejs中全局變量的實例解析

    nodejs中全局變量的實例解析

    本文主要介紹了nodejs中全局變量的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • node.js應用后臺守護進程管理器Forever安裝和使用實例

    node.js應用后臺守護進程管理器Forever安裝和使用實例

    這篇文章主要介紹了node.js應用后臺守護進程管理器Forever安裝和使用實例,forever可以看做是一個nodejs的守護進程,能夠啟動,停止,重啟我們的app應用,需要的朋友可以參考下
    2014-06-06
  • Node學習筆記:Node.js安裝及環(huán)境配置 史詩級詳細版【含測試與鏡像說明】

    Node學習筆記:Node.js安裝及環(huán)境配置 史詩級詳細版【含測試與鏡像說明】

    這篇文章主要介紹了Node學習筆記之Node.js安裝及環(huán)境配置方法,詳細分析了node.js的基本安裝、配置、環(huán)境變量設置、以及環(huán)境測試與鏡像使用說明,需要的朋友可以參考下
    2023-05-05
  • 解決Mac安裝thrift因bison報錯的問題

    解決Mac安裝thrift因bison報錯的問題

    今天小編就為大家分享一篇解決Mac安裝thrift因bison報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • nodejs express搭建服務并熱更新文件過程詳解

    nodejs express搭建服務并熱更新文件過程詳解

    這篇文章主要為大家介紹了nodejs express搭建服務并熱更新文件過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • node.js實現帶進度條的多文件上傳

    node.js實現帶進度條的多文件上傳

    這篇文章主要為大家詳細介紹了node.js實現攜帶進度條的多文件上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 使用nvm切換node版本的實現方法

    使用nvm切換node版本的實現方法

    我們在工作中可能會碰到這樣的情況:一個人要負責多個項目的維護,而項目中的插件又各有不同,插件下載所需的node版本可能也不同,所以只有一個node版本是無法滿足工作需求的,所以就有了nvm,volta等node版本管理工具,在本節(jié)將介紹nvm的使用方法
    2023-10-10

最新評論