ES6模組的import和export用法總結
阿新 • • 發佈:2019-02-04
轉自:https://www.cnblogs.com/dupd/p/5951311.html
ES6之前已經出現了js模組載入的方案,最主要的是CommonJS和AMD規範。commonjs主要應用於伺服器,實現同步載入,如nodejs。AMD規範應用於瀏覽器,如requirejs,為非同步載入。同時還有CMD規範,為同步載入方案如seaJS。
ES6在語言規格的層面上,實現了模組功能,而且實現得相當簡單,完全可以取代現有的CommonJS和AMD規範,成為瀏覽器和伺服器通用的模組解決方案。
ES6模組主要有兩個功能:export和import
export用於對外輸出本模組(一個檔案可以理解為一個模組)變數的介面
import用於在一個模組中載入另一個含有export介面的模組。
也就是說使用export
命令定義了模組的對外介面以後,其他JS檔案就可以通過import
命令載入這個模組(檔案)。如下圖(假設a和b檔案在同一目錄下)
// a.js
var sex="boy";
var echo=function(value){
console.log(value)
}
export {sex,echo}
//通過向大括號中新增sex,echo變數並且export輸出,就可以將對應變數值以sex、echo變數識別符號形式暴露給其他檔案而被讀取到
//不能寫成export sex這樣的方式,如果這樣就相當於export "boy",外部檔案就獲取不到該檔案的內部變數sex的值,因為沒有對外輸出變數介面,只是輸出的字串。
// b.js
通過import獲取a.js檔案的內部變數,{}括號內的變數來自於a.js檔案export出的變數識別符號。
import {sex,echo} from "./a.js"
console.log(sex) // boy
echo(sex) // boy
a.js檔案也可以按如下export語法寫,但不如上邊直觀,不太推薦。
// a.js
export var sex="boy"; export var echo=function(value){ console.log(value) }
//因為function echo(){}等價於 var echo=function(){}所以也可以寫成
export function echo(value){
console.log(value)
}
以上是export與module的基本用法,再進行拓展學習
前面的例子可以看出,b.js使用import
命令的時候,使用者需要知道a.js所暴露出的變數識別符號,否則無法載入。可以使用export default
命令,為模組指定預設輸出,這樣就不需要知道所要載入模組的變數名。
//a.js
var sex="boy"; export default sex(sex不能加大括號)
//原本直接export sex外部是無法識別的,加上default就可以了.但是一個檔案內最多隻能有一個export default。
其實此處相當於為sex變數值"boy"起了一個系統預設的變數名default,自然default只能有一個值,所以一個檔案內不能有多個export default。
// b.js
本質上,a.js檔案的export default
輸出一個叫做default
的變數,然後系統允許你為它取任意名字。所以可以為import的模組起任何變數名,且不需要用大括號包含 import any from "./a.js"
import any12 from "./a.js" console.log(any,any12) // boy,boy
參考:http://es6.ruanyifeng.com/#docs/module