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;