天天看點

es6 module

ES6子產品 import { stat, exists, readFile } from 'fs'; 上面代碼的實質是從fs子產品加載3個方法,其他方法不加載。這種加載稱為“編譯時加載”,即ES6可以在編譯時就完成子產品加載,效率要比CommonJS 子產品(運作時确定依賴關系)的加載方式高。

一 export 

 1. 輸出變量

var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};
           

  2.輸出函數和類

export function multiply(x, y) {
return x * y;
};
上面代碼對外輸出一個函數multiply。
           

3.注意

// 報錯
var m = 1;
export m;

正确

// 寫法一
export var m = 1;
// 寫法二
var m = 1;
export {m};

// 報錯
function f() {}
export f;

// 正确
export function f() {};

// 正确
function f() {}
export {f};
           

4.export default 指令

使用import指令的時候,使用者需要知道所要加載的變量名或函數名,否則無法加載。為了提供友善,讓他們不用閱讀文檔就能加載子產品,就要用到export default指令,為子產品指定預設輸出。

// export-default.js
export default function () {
console.log('foo');
}
上面代碼是一個子產品檔案export-default.js,它的預設輸出是一個函數。
其他子產品加載該子產品時,import指令可以為該匿名函數指定任意名字。
// import-default.js
import customName from './export-default';
customName(); // 'foo'
           

3.兩種寫法 不寫default 和寫default 

// 輸出
export default function crc32() {
// ...
}
// 輸入
import crc32 from 'crc32';
// 輸出
export function crc32() {
// ...
};
// 輸入
import {crc32} from 'crc32';

上面代碼的兩組寫法,第一組是使用export default時,對應的import語句不需要使用大括号;第二組是不使用export default時,對應的import語
句需要使用大括号。
           

1.

export default指令用于指定子產品的預設輸出。顯然,一個子產品隻能有一個預設輸出,是以export deault指令隻能使用一次。是以,import指令後面 才不用加大括号,因為隻可能對應一個方法。

本質上,export default就是輸出一個叫做default的變量或方法,然後系統允許你為它取任意名字。是以,下面的寫法是有效的。
// modules.js
function add(x, y) {
return x * y;
}
export {add as default};
// 等同于
// export default add;
// app.js
import { default as xxx } from 'modules';
// 等同于
// import xxx from 'modules';
           

二 import 

1 使用export指令定義了子產品的對外接口以後,其他JS檔案就可以通過import指令加載這個子產品(檔案)。

// main.js
import {firstName, lastName, year} from './profile';
function setName(element) {
element.textContent = firstName + ' ' + lastName;
}
上面代碼的import指令,就用于加載profile.js檔案,并從中輸入變量。import指令接受一個對象(用大括号表示),裡面指定要從其他子產品導入的
變量名。大括号裡面的變量名,必須與被導入子產品(profile.js)對外接口的名稱相同。
           

2. import指令具有提升效果,會提升到整個子產品的頭部,首先執行。

三 風格

如果子產品預設輸出一個函數,函數名的首字母應該小寫。
function makeStyleGuide() {
}
export default makeStyleGuide;
如果子產品預設輸出一個對象,對象名的首字母應該大寫。
const StyleGuide = {
es6: {
}
};
export default StyleGuide;
           
es6