第13章 Modules

Modules

modules有2種形式亦鳞,一種requireJS橡卤,另一種commonJS肝劲,現(xiàn)在ES6引入自己的modules.Modules的強(qiáng)大之處就是只輸入輸出你想要的部分葵蒂,而不是必須是全部梁沧。

一.basic exporting and importing

basic exporting

通過 export 關(guān)鍵字發(fā)布modules中的部分代碼檀何,基本輸出可以是變量,函數(shù)廷支,class

// 輸出變量 "example.js"
export var color = "red";
export const magicNumber = 7;

// 輸出函數(shù)
export function sum(a, b) {
    return a + b;
}

// 輸出class
export class Rectangle(width, height) {
    // ...
}

// 私有的频鉴,不輸出
function subtract(a, b) {
    return a - b;
}

// 先定義后輸出
function multiply(a, b) {
    return a * b;
}
export multiply;

You cann't export anonymous functions or classes using this syntax unless you are using default keyword

basic importing

基本形式為:

import { identifier1, identifier2 } from "./example.js";
// { identifier1, identifier2 } 這些綁定列表看起來像解構(gòu),但不是的

1.import 1個binding

import { sum } from "./example.js";
sum(1, 2); // 3

2.import 多個bindings

import { sum, magicNumber } from "./example.js";
sum(2, magicNumber); // 9

3.import 整個module

使用 as 關(guān)鍵詞

import * as example from "./example.js";
example.sum(1, 2); // 3 

4.export酥泞, import限制

export, import最重要的限制就是: 必須用于語句和函數(shù)的外面

if (flag) {
    export flag; // 拋出錯誤
}

function tryImport() {
    import flag from "./example.js"; // 拋出錯誤
}

二. Renaming exports and imports

通過 as 關(guān)鍵詞可以給輸出輸入重新命名

function sum(a, b) {
    return a + b;
}
// 輸出重新命名
export sum as add; // 將'sum' 以 'add' 名字輸出砚殿,其它modules import時需要import 'add'
import { add } from "./example.js";

// 輸入重命名
import { add as sum } from "./example.js";
// 現(xiàn)在只能使用sum

三.Default Values in Modules

The default value for a module is a single varible, function or class as specified by the default keyword, and you can only set only default export per module.通過default關(guān)鍵詞為module設(shè)置默認(rèn)輸出,每個module只能有一個默認(rèn)的輸出

// 注意使用默認(rèn)輸出后可以使用匿名函數(shù)
export default function(a, b) {
    return a + b;
}

// the function doesn't need a name, because the module represents the function

// 也可以先定義后輸出
function sum(a, b) {
    return a + b;
}
export default sum;

// 或者
export let color = "red";
export default function sum(a, b) {
    return a + b;
}

import default

import sum, { color } from "./example.js";
// 注意sum不用使用{}

// 或者寫為
import { default as sum, color} from "./example.js";
sum(1, 2); // 3

注意import中默認(rèn)的必須出現(xiàn)在最前面

四.Re-exporting a binding

從別的module中import,然后重新export

import { sum } from "./example.js";
export { sum };

// 或者可以直接寫為
export { sum } from "./example.js";
// 同樣也可重命名
export { sum as add } from "./example.js";

五. Importing without binding

有一些module可能什么也不輸出芝囤, 只是修改全局上的對象似炎, 一般用于polyfill或者shims

// 'example.js'
// module code without export and import,用作script或者module
Array.prototype.pushAll = function(items) {
    if (!Array.isArray(items)) {
        throw new TypeError("Arguments must be array");
    }

    return this.push(...items);
}

// 其他module
import "./example.js";

let colors = ["red", "blue"];
let items = [];

items.pushAll(colors);

六.路徑問題

  • / ---> root directory
  • ./ ---> current directory
  • ../ ---> parent directory

總結(jié)

ES6 modules 在React 中使用非常廣泛,語法相對其余modules比較簡單悯姊,注意一下路徑問題就可以羡藐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市悯许,隨后出現(xiàn)的幾起案子仆嗦,更是在濱河造成了極大的恐慌,老刑警劉巖先壕,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘩扼,死亡現(xiàn)場離奇詭異,居然都是意外死亡垃僚,警方通過查閱死者的電腦和手機(jī)集绰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谆棺,“玉大人栽燕,你說我怎么就攤上這事「氖纾” “怎么了碍岔?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朵夏。 經(jīng)常有香客問我蔼啦,道長,這世上最難降的妖魔是什么仰猖? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任捏肢,我火速辦了婚禮掠河,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘猛计。我一直安慰自己,他們只是感情好爆捞,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布奉瘤。 她就那樣靜靜地躺著,像睡著了一般煮甥。 火紅的嫁衣襯著肌膚如雪盗温。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天成肘,我揣著相機(jī)與錄音卖局,去河邊找鬼。 笑死双霍,一個胖子當(dāng)著我的面吹牛砚偶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洒闸,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼染坯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丘逸?” 一聲冷哼從身側(cè)響起单鹿,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎深纲,沒想到半個月后仲锄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡湃鹊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年儒喊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涛舍。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡澄惊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出富雅,到底是詐尸還是另有隱情掸驱,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布没佑,位于F島的核電站毕贼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛤奢。R本人自食惡果不足惜鬼癣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一陶贼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧待秃,春花似錦拜秧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至暖庄,卻和暖如春聊替,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背培廓。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工惹悄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人肩钠。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓泣港,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蔬将。 傳聞我的和親對象是個殘疾皇子爷速,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)霞怀,斷路器惫东,智...
    卡卡羅2017閱讀 134,702評論 18 139
  • { "Unterminated string literal.": "未終止的字符串文本。", "Identifi...
    栗子雨閱讀 7,893評論 0 3
  • "Unterminated string literal.": "未終止的字符串文本毙石。", "Identifier...
    兩個心閱讀 8,384評論 0 4
  • The current best practice for block bindings is to use co...
    凜子哥閱讀 471評論 0 1
  • 中間那片云廉沮,藍(lán)色的部分顏色太深了。這幅畫練的是速度徐矩,既要快滞时,顏色又要準(zhǔn)。
    小軒媽閱讀 229評論 0 2