日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Nodejs模块、自定义模块、CommonJs的概念和使用

發布時間:2025/3/19 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Nodejs模块、自定义模块、CommonJs的概念和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

CommonJs

JavaScript 是一個強大面向對象語言,它有很多快速高效的解釋器。然而, JavaScript
標準定義的API 是為了構建基于瀏覽器的應用程序。并沒有制定一個用于更廣泛的應用程序
的標準庫。CommonJS 規范的提出,主要是為了彌補當前JavaScript 沒有標準庫的缺陷。它的
終極目標就是:提供一個類似Python,Ruby 和Java 語言的標準庫,而不只是讓JavaScript 停
留在小腳本程序的階段。用CommonJS API 編寫出的應用,不僅可以利用JavaScript 開發客
戶端應用,而且還可以編寫以下應用。

服務器端JavaScript 應用程序。(nodejs)
命令行工具。
桌面圖形界面應用程序。

簡單概括一句話:

CommonJS 就是模塊化的標準,nodejs 就是CommonJS(模塊化)的實現。

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

Nodejs中的模塊化

Node 應用由模塊組成,采用CommonJS 模塊規范。

在Node中,模塊分為兩類:

??? 一類是Node 提供的模塊,稱為核心模塊;另一類是用戶編寫的模塊,稱為文件模塊。
核心模塊部分在Node 源代碼的編譯過程中,編譯進了二進制執行文件。在Node 進
程啟動時,部分核心模塊就被直接加載進內存中,所以這部分核心模塊引入時,文件定位和
編譯執行這兩個步驟可以省略掉,并且在路徑分析中優先判斷,所以它的加載速度是最快的。
如:HTTP 模塊、URL 模塊、Fs 模塊都是nodejs 內置的核心模塊,可以直接引入使用。
??? 文件模塊則是在運行時動態加載,需要完整的路徑分析、文件定位、編譯執行過程、
速度相比核心模塊稍微慢一些,但是用的非常多。這些模塊需要我們自己定義。接下來我
們看一下nodejs 中的自定義模塊。

CommonJS(Nodejs)中自定義模塊的規定

1.我們可以把公共的功能抽離成為一個單獨的js 文件作為一個模塊,默認情況下面這
個模塊里面的方法或者屬性,外面是沒法訪問的。如果要讓外部可以訪問模塊里面的方法或
者屬性,就必須在模塊里面通過exports 或者module.exports 暴露屬性或者方法。

2. 在需要使用這些模塊的文件中,通過require 的方式引入這個模塊。這個時候就可
以使用模塊里面暴露的屬性和方法。

自定義模塊簡單示例

在項目目錄下新建文件夾module用來存放自定義的公共模塊。

在module下新建tools.js

function formatName(api){return "公眾號:"+api; }exports.formatName=formatName;

自定義模塊中新建一個函數,并通過exports暴露。

然后在項目目錄下新建test1.js

?

在test1.js中,通過

const tools = require('./module/tools.js');

引入模塊

然后通過

var name = tools.formatName('霸道的程序猿');

調用模塊的方法

最后輸出

console.log(name);

test1.js完整示例代碼

const tools = require('./module/tools.js'); var name = tools.formatName('霸道的程序猿'); console.log(name);

然后打開終端運行

node test1.js

?

自定義模塊含有多個方法

如果自定義模塊中含有多個方法,即將自定義模塊定義為對象,其下有多個方法。

var tools = {sayName:function(){return "公眾號:";},sayValue:function(){return "霸道的程序猿";} }exports.sayName = tools.sayName; exports.sayValue = tools.sayValue;

然后新建test2.js

var tools = require('./module/tools'); console.log(tools.sayName()); console.log(tools.sayValue());

運行test2.js

node test2.js

?

自定義模塊的約定路徑

在項目下新建node_modules目錄,在此目錄下新建一個自定義模塊的文件夾,比如新建axios,并在axios下新建index.js
?

exports.get=function(){console.log('從服務器獲取數據') }exports.post=function(){console.log('提交數據') }

模擬從服務器獲取數據和提交數據。

然后在項目目錄下新建test3.js

const axios=require('axios');axios.get();axios.post();

文件位置如下

?

可以看到此時引入自定義模塊的路徑為

const axios=require('axios');

先運行下test3.js

node test3.js

?

這里引入自定義模塊沒有使用全路徑直接使用

const axios=require('axios');

就可以引用的原因是node會默認尋找node_modules目錄下對應模塊名字目錄下的index.js這個模塊

這里必須是index.js

如果名字不是index.js,比如這里改名為badao.js就會報錯

?

可是如果說非要使用badao.js自定義的名字不使用index.js的話怎么辦。

比如我們在node_modules下新建badao文件夾,其下面的模塊起名為badao.js而不是index.js

?



?

exports.get=function(){console.log('從badao獲取數據') }exports.post=function(){console.log('提交數據到badao') }

然后找到badao.js所在的文件夾下打開命令行輸入

npm init

?

此時會在badao.js同級目錄下生成package.json

{"name": "badao","version": "1.0.0","description": "","main": "badao.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC" }

此文件就會表明此模塊的入口函數為badao.js

那么再引入badao模塊時就會先找package.json

然后根據其入口函數去查找模塊。

然后在項目下新建test4.js

const badao = require('badao'); badao.get(); badao.post();

運行test4.js

node test4.js

?

?

總結

以上是生活随笔為你收集整理的Nodejs模块、自定义模块、CommonJs的概念和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。