簡明 ES6 模組
阿新 • • 發佈:2019-01-02
簡明 ES6 模組
1.什麼是模組
模組就是一段程式碼,這段程式碼可以反覆使用,經常單獨寫成一個檔案,一旦載入會立即執行。
2.匯出
匯出有 2 種方式:命名匯出和預設匯出,分別用關鍵字export
和export default
表示
2.1 命名匯出:export 關鍵字
- 第一種方式:在要匯出的程式碼前加上 export 關鍵字就可以了!
export var foo; export let foo; export const foo; export function myFunc() {} export function* myGenFunc() {} export class MyClass {}
- 第二種方式:將要匯出的物件放在
export {}
的{}
中
var foo1;
let foo2;
const foo3;
function myFunc() {}
class MyClass {}
export {foo1, foo2, foo3, myFunc, MyClass}
2.2 預設匯出:export default 關鍵字
- 第一種方式:在要匯出的函式或者類之前加 export default 關鍵字,其中名稱可以省略。這將會使其具有匿名函式和匿名類的功能。
export default function myFunc() {} export default function () {} export default function* myGenFunc() {} export default function* () {} export default class MyClass {} export default class {} export default foo; export default 'Hello world!'; export default 3 * 7; export default (function () {});
- 第二種方式:用
export default moduleName
關鍵字匯出
=========================
var foo1;
export default foo1;
==========================
let foo2;
export default let foo2;
==========================
export function myFunc() {};
export default myFunc;
注意:使用命名匯出時,一個 js 檔案可以 export 多個模組;但是使用預設匯出時,一個檔案只能有一個模組匯出,或者將會報錯。
2.3 其他
2.3.1 重新命名匯出
export { MY_CONST as FOO, myFunc };
export { foo as default };
2.3.2 從其他模組匯出
`export * from 'src/other_module';`
export { foo as myFoo, bar } from 'src/other_module';
export { default } from 'src/other_module';
export { default as foo } from 'src/other_module';
export { foo as default } from 'src/other_module'
3.匯入
匯入方式 | 語法 | 描述 |
---|---|---|
預設匯入 | import localName from 'src/my_lib'; |
- |
名稱空間匯入 | import * as my_lib from 'src/my_lib'; |
- |
命名匯入 | import { name1, name2 } from 'src/my_lib'; |
- |
重新命名匯入 | import { name1 as localName1, name2 } from 'src/my_lib'; |
- |
空匯入 | import 'src/my_lib'; |
僅載入模組,不匯入任何內容 |
預設匯入+名稱空間 | import theDefault, * as my_lib from 'src/my_lib'; |
- |
預設匯入+命名匯入 | import theDefault, { name1, name2 } from 'src/my_lib'; |
- |
4.匯出與匯入之家的關聯
- 使用命名匯出時,應用
import {ModuleName}
的方式匯入;使用預設匯出時,使用import moduleName
的方式匯入,無需加花括號。 - 匯入的時候,我們可以只匯入我們需要的模組,如以下。
------lib.js-----
export const PI = '3.14'
export let perimeter = radius => {
console.log('周長:', 2 * PI * radius)
}
-----main.js-----
import {perimeter} from 'lib'
perimeter(1);
5.注意事項
- 直接使用模組語法在瀏覽器中可能無效,需要 babel 等工具轉為可接受的語法
- 匯出的 2 種方式 export 和 export default 在一個檔案中最好用一種,儘量少混用
- 在 ES6 模組中,default 是一個關鍵字,不要使用 default 作為 as 的重新命名名稱
- import 後,import 的模組將會被提升,放置於當前程式碼的最前端。因此,何處匯入模組並不重要。
- import 應該是單獨的一條語句,不能在其他語句中執行該語句。以下 example.js 中的操作將導致錯誤。
- 匯入的只是當初模組的只讀檢視,這意味著操作的模組中的變數都儲存在模組的內部
-----example.js------
if(xxx){
import example from "mock"
}
6.例項
【例項 1】連結資訊
-----mock.js-----
export let linkInfo = [
{
name: '百度',
address: 'baidu.com'
},
{
name: '新浪',
address: 'sina.com'
},
{
name: '優酷',
address: 'youku.com'
}
]
-----main.js-----
import {linkInfo} from "mock"
console.log('連結資訊:',JSON.stringify(linkInfo))
【例項 2】工具類
【。。。待填坑】
【例項 3】介面
-----api.js-----
export default {
addLink (link) {
let params = {
name: link.name,
address: link.address
}
return http
.post('/link/add', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
updateLink (link) {
let params = {
id: link.id,
name: link.name,
address: link.address
}
return http
.post('/link/update', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
getLinkList () {
let params = {
currentPage: 1,
pageSize: 20
}
return http
.post('/link/list', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
},
deleteLink (link) {
let params = {
id: link.id
}
return http
.post('/link/delete', params)
.then(data => {
return Promise.resolve(data)
})
.catch(e => {
return Promise.reject(e)
})
}
}
-----main.js-----
import * as api from "./myLib";
api.addLink(myParams)
.then(res=>{console.log("well")})
.catch(e => {console.log(e)});