前端模組化(node ES6)

2021-10-06 08:50:29 字數 4358 閱讀 2739

node模組化(commonjs規範)

1.nodejs開發中的模組

nodejs採用commonjs規範實現了模組系統

2.什麼是commonjs規範?

commonjs規範規定了如何定義乙個模組,如何匯出模組中的資料以及如何使用定義好的模組

2.1在commonjs規範中,乙個檔案就是乙個模組

2.2在commonjs規範中,每個檔案中的資料都是私有地,對其他檔案不可見

2.3在commonjs規範中,每個檔案中的資料,必須通過exports匯出之後,其他檔案才可以使用

2.4在commonjs規範中,要想使用其他檔案暴露的資料,必須通過require匯入模組後才可以使用

3.node模組化中暴露資料的幾種方式

有三中匯出資料的方式,但無論使用哪種方式匯出,使用時都必須先用require匯入

3.1 exports.*** = ***

let name =

'andy'

;function

sum(a,b)

exports.str = name;

exports.fn = sum;

//exports是乙個物件,暴露資料的過程就是給exports物件新增屬性的過程

let amodule =

require

('./a.js');

console.

log(amodule.str)

;//andy

amodule.fn(

10,20)

;//30

3.2 module.exports.*** = ***

let name =

'andy'

;function

sum(a,b)

module.exports.str = name;

module.exports.fn = sum;

let amodule =

require

('./a.js');

console.

log(amodule.str)

;//andy

amodule.fn(

10,20)

;//30

或者直接給module.exports賦值

function

sum(a,b)

module.exports = sum;

const sum =

require

('./a.js');

sum(10,

20);

3.3 global.*** = ***(不符合commonjs規範,一般不使用這種方式)

let name =

'andy'

;function

sum(a,b)

global.str = name;

global.fn = sum;

//global為node中的全域性物件,模擬js中的window

let amodule =

require

('./a.js');

console.

log(global.str)

;//andy

global.fn(

10,20)

;//30

exports和module.exports的區別?

不能直接給exports賦值,但是可以直接給module.exports賦值

(在開發中無論哪種方式都不要直接賦值,這種情況只會出現在面試題中)?

let name =

'andy'

;exports = name;

//這種方式匯入後拿不到資料,是個空物件

module.exports = name;

//這種方式匯入後能拿到資料,『andy』

//兩者的區別在於:不能直接給exports賦值,但是可以直接給module.exports賦值

require注意點

1.1require匯入模組時可以不新增匯入模組的型別

如果沒有指定匯入模組的型別, 那麼會依次查詢.js .json .node檔案

無論是三種型別中的哪一種, 匯入之後都會轉換成js物件返回給我們

1.2匯入自定義模組時必須指定路徑

require可以匯入"自定義模組(檔案模組)"、「系統模組(核心模組)」、「第三方模組」

匯入"自定義模組"模組時前面必須加上路徑

匯入"系統模組"和"第三方模組"是不用新增路徑

1.3匯入"系統模組"和"第三方模組"是不用新增路徑的原因

如果是"系統模組"直接到環境變數配置的路徑中查詢

如果是"第三方模組"會按照module.paths陣列中的路徑依次查詢

es6模組化

es6模組化的第一種方式

匯出資料:export ;

匯入資料:import from 『path』

注意點:

1.如果是通過export 的方式匯出資料,那麼在匯入接受資料的時候,接收的變數名必須和匯出的變數名保持一致,

如果不一致則拿不到變數,究其原因,是因為在匯入的時候的本質是es6的解構賦值

//回顧解構賦值

let obj =

;let

= obj;

console.

log(name)

;console.

log(age)

;

2.如果是通過export 的方式匯出資料,又想在匯入資料的時候修改接收的變數名稱,那麼可以使用as來修改,但是如果通過as修改了接收的變數名稱,那麼原有的的變數名稱就會失效

let name =

'zs'

;export

;

import

from

'./a.js'

console.

log(name)

;import

from

'./a.js'

console.

log(str)

;//使用str時name失效

es6模組化的第二種方式

匯出資料:export default ***;

匯入資料:import *** from 『path』

注意點:

1.如果是通過export default *** 匯出資料,那麼接收的變數名可以和匯出的變數名不一致

2.如果是通過export default *** 匯出資料,那麼在模組中只能使用一次export default

let name =

'zs'

;export

default name;

import name from

'./b.js'

import str from

'./b.js'

;console.

log(name)

;console.

log(str)

;//可以直接使用不同與匯出時的變數名來接收

es6模組化的結合使用

let name =

'ted'

;let age =12;

function

say(

)class

person

}export

;export

default person;

import person,

from '.

/c.js

let p =

newperson()

;console.

log(p)

;console.

log(str)

;console.

log(age)

;say()

;

前端模組化

前端模組化解決什麼問題?有了模組,我就可以很方便的使用別人的 想要什麼功能,就用載入什麼模組。但是,這樣做需要有乙個前提,那就是大家必須以同樣的方式編寫模組,否則就亂套了。所以組內需要有一套統一的模組規範。如何實現模組?1 物件字面量的變體 2 js設計模式的模組模式 3 採用成熟的庫檔案。前兩種方...

前端模組化

定義 具有相同屬性和行為的事物的集合 在前端中 將一些屬性比較類似和行為比較類似的內容放在同乙個js檔案裡面,把這個js檔案稱為模組 目的 為了每個js檔案只關注與自身有關的事情,讓每個js檔案各行其職 模組化 指的就是遵守commonjs規範,解決不同js模組之間相互呼叫問題 commonjs a...

前端模組化

當多人開發同一專案時,很容易就會產生命名衝突的問題,尤其是js檔案,任何的js引入順序的打亂都可能導致專案執行失敗,為了解決命名衝突的問題,在es6之前,可以使用函式閉包來解決這個問題。即可能像這樣 function 這樣雖然可以解決命名衝突的問題,但也使得 的復用性變得極差,因為其它的檔案將無法再...