首頁  >  文章  >  web前端  >  CommonJS規範是什麼?了解CommonJS規範

CommonJS規範是什麼?了解CommonJS規範

不言
不言轉載
2018-10-26 15:11:572559瀏覽

這篇文章帶給大家的內容是關於CommonJS規範是什麼?了解CommonJS規範,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

寫在前面:
  一個檔案就是一個模組。
  另外本文中的範例程式碼需要在node.js環境中方可正常運行,否則會發生錯誤。事實上ES6已經出現了模組規範,如果使用ES6的模組規範是無需node.js環境的。因此,需要將commonJS規範和ES6的模組規範區分開來。

一、為什麼制定CommonJS規格?

在後端,JavaScript的規格遠遠落後並且有許多缺陷,這使得使用JavaScript 開發大型應用程式難以使用。例如:

沒有模組系統
標準函式庫較少
沒有標準介面
缺乏套件管理系統
清單內容

CommonJS規格的提出,主要是為了彌補JavaScript沒有標準的缺陷,已達到像Python、Ruby和Java那樣具備開發大型應用的基礎能力,而不是停留在開發瀏覽器端小腳本程式的階段。

二、CommonJS模組規格
  CommonJS模組規格主要分為三個部分:模組引用、模組定義、模組識別。

1、模組引用 

如果在a.js檔案中使用以下語句

var math=require('math');

意為使用require()方法,引入math模組,並賦值給變數math 。事實上,命名的變數名稱和引入的模組名稱不必相同,就像這樣:

var Math=require('math');

賦值的意義在於,a.js中將僅能識別Math,因為這是已經定義的變量,並不能辨識math,因為math沒有定義。

帶路徑與不帶路徑

上面範例中require的參數只是模組名字的字串,沒有有路徑,引用的是a .js所在目前目錄下的node_modules目錄下的math模組。如果目前目錄沒有node_modules目錄或node_modules目錄裡面沒有安裝math模組,便會報錯。
  
如果要引入的模組在其他路徑,就需要使用到相對路徑或絕對路徑,例如:

var add=require('./add.js')

  上面範例中引入了目前目錄下的add.js文件,並賦值給add變數。

2、模組定義

module物件:在每一個模組中,module物件代表該模組本身。
export屬性:module物件的一個屬性,它向外提供介面。

仍然採用上一個範例,假設add.js中的程式碼如下:  

function add(num1,num2){
    alert(num1+num2);
}

  儘管a.js檔案引入了add.js文件,前者卻仍然無法使用後者中的add函數,在a.js檔中add(3,5)這樣的程式碼會報錯,提示add不是一個函數。
  add.js中的函數要能被其他模組使用,就需要暴露一個對外的接口,export屬性用於完成這項工作。將add.js中程式碼改為如下:

exports.add=function (num1,num2){
    alert(num1+num2);
}

  a.js檔案就可以正常呼叫add.js中的方法,例如add.add(3,5)這樣的呼叫能夠正常執行,前一個add意為本檔案中add變數所代表的模組,後者是引入模組的add方法。

3、模組識別

模組識別指的是傳遞給require方法的參數,必須是符合小駝峰命名的字串,或者以. 、.. 、開頭的相對路徑,或絕對路徑。

三、CommonJS模組規格的好處
CommonJS模組規格很好地解決變數污染問題,每個模組具有獨立空間,互不干擾,命名空間等方案與之相比相形見絀。

CommonJS規格定義模組十分簡單,介面十分簡潔。

CommonJS模組規格支援引入和導出功能,這樣可以順暢地連接各個模組,實現彼此間的依賴關係。

以上是CommonJS規範是什麼?了解CommonJS規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除