最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

nodeJS的介紹

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

CommonJS

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

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

為了方便使用模塊化,于是提供了幾個全局的方法或?qū)ο?,分別是:

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

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

模塊的導(dǎo)入和導(dǎo)出

首先準(zhǔn)備一個目錄:

a.js 模塊導(dǎo)出內(nèi)容:

const name = 'kw'

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

模塊要導(dǎo)出的內(nèi)容是存放在 module.exports 中的,默認(rèn)是一個空對象。

exportsmodule.exports 的別名,在導(dǎo)出內(nèi)容時,切不可這樣做:

const name = 'kw'

exports = name

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

idnex.js中,導(dǎo)入 a 模塊:

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

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

模塊不止 .js

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

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

  • 后綴名為 .js 的文件
  • 后綴名 .json 的 json 文件
  • 后綴名為 .node 的經(jīng)過編譯的二進(jìn)制模塊文件

對不同文件后綴的模塊有不同的加載策略。對于 json 文件會調(diào)用 fs 模塊讀取后再用 JSON.parse 方法轉(zhuǎn)成 json對象;對于 .node 文件,不經(jīng)任何處理,直接調(diào)用。

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

require 導(dǎo)入模塊的查找機(jī)制

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

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

require 方法在導(dǎo)入模塊時,會有一個查找的機(jī)制。

導(dǎo)入內(nèi)置模塊

參數(shù)是一個模塊名。如果發(fā)現(xiàn)是內(nèi)置模塊,則導(dǎo)入并結(jié)束查找。

const http = require('http')

導(dǎo)入自定義模塊

參數(shù)是一個文件路徑,以 ./../ 或者 /開頭。

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

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

如果模塊沒有帶后綴:

const a = require('./a')

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

導(dǎo)入第三方模塊

參數(shù)是一個模塊名,并且不是核心模塊名。

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

npm install dayjs
// src/index.js

// 發(fā)現(xiàn) dayjs 不是內(nèi)置模塊,首先會從當(dāng)前模塊所在目錄的 node_modules 目錄下查找,找到后就結(jié)束查找。找不到則向上一級目錄查找,一直到系統(tǒng)的根目錄。
// 查找順序分別是:
/** 
    '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'
    在我們的目錄結(jié)構(gòu)中,會從第二個路徑中找到,于是導(dǎo)入模塊,結(jié)束查找。
*/

const dayjs = require('dayjs')

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

小結(jié)

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

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

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

相關(guān)文章

  • express中static中間件的具體使用方法

    express中static中間件的具體使用方法

    這篇文章主要介紹了express中static中間件的具體使用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Node使用Sequlize連接Mysql報錯:Access denied for user ‘xxx’@‘localhost’

    Node使用Sequlize連接Mysql報錯:Access denied for user ‘xxx’@‘localh

    這篇文章主要給大家介紹了關(guān)于Node使用Sequlize連接Mysql報錯:Access denied for user 'xxx'@'localhost'的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)

    Nginx設(shè)置為Node.js的前端服務(wù)器方法總結(jié)

    在本篇文章中小編給大家分享了關(guān)于Nginx設(shè)置為Node.js的前端服務(wù)器的方法和實(shí)例,需要的朋友們學(xué)習(xí)下。
    2019-03-03
  • nodejs dgram模塊廣播+組播的實(shí)現(xiàn)示例

    nodejs dgram模塊廣播+組播的實(shí)現(xiàn)示例

    這篇文章主要介紹了nodejs dgram模塊廣播+組播的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • 實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例代碼

    實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例代碼

    本篇文章主要介紹了實(shí)戰(zhàn)node靜態(tài)文件服務(wù)器的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • nodejs acl的用戶權(quán)限管理詳解

    nodejs acl的用戶權(quán)限管理詳解

    這篇文章主要介紹了nodejs acl的用戶權(quán)限管理詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解

    這篇文章主要為大家介紹了Nodejs使用dgram模塊創(chuàng)建UDP服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳

    這篇文章主要介紹了nodejs 整合kindEditor實(shí)現(xiàn)圖片上傳,需要的朋友可以參考下
    2015-02-02
  • 淺談如何把Node項(xiàng)目部署到服務(wù)器上

    淺談如何把Node項(xiàng)目部署到服務(wù)器上

    本文主要介紹了淺談如何把Node項(xiàng)目部署到服務(wù)器上,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • NodeJS中配置請求代理服務(wù)器方式

    NodeJS中配置請求代理服務(wù)器方式

    這篇文章主要介紹了NodeJS中配置請求代理服務(wù)器方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

芦溪县| 苗栗市| 仪陇县| 赣榆县| 广东省| 博爱县| 青川县| 广河县| 洪洞县| 嘉义市| 定西市| 梁河县| 曲靖市| 武胜县| 新田县| 兴化市| 伊吾县| 达孜县| 涡阳县| 九江市| 青铜峡市| 陵水| 正安县| 淮滨县| 绿春县| 通城县| 沙河市| 南陵县| 泗阳县| 武隆县| 蛟河市| 三穗县| 顺平县| 江山市| 宣恩县| 渑池县| 景洪市| 疏附县| 鸡泽县| 库伦旗| 六安市|