Node背景介紹
Node是一個(gè)js文件的執(zhí)行環(huán)境(類似于java的jvm),所以可以執(zhí)行任何js文件肴掷。在命令行輸入:node yourJSFileName.js 即可缭乘,執(zhí)行js文件中的內(nèi)容澈圈。
模塊化module
node.js模塊化系統(tǒng)中,每一個(gè)js文件都被看做是一個(gè)模塊module簇秒。在實(shí)際操作中,node既然可以執(zhí)行js文件秀鞭,肯定一個(gè)文件解決的問題有限(不方便維護(hù))趋观。所以扛禽,js文件可以引用其他js文件。詳細(xì)參考官方說明文檔: https://nodejs.org/api/modules.html
import && export
import & export 屬于ES6用法:
- Node 9 (?)之前不支持import & export皱坛,只能用require && module.exports
- jest測(cè)試框架目前不支持ES6
以上情況都需要使用babel對(duì)ES6的模塊輸出進(jìn)行處理旋圆,將所有輸出都賦值給exports,并帶上一個(gè)標(biāo)志_esModule標(biāo)明這個(gè)是由es6轉(zhuǎn)化來的ES5的commonjs輸出麸恍,再進(jìn)行編譯運(yùn)行灵巧。
babel將模塊的導(dǎo)出轉(zhuǎn)換為commonjs規(guī)范后,也會(huì)將引入 import 也轉(zhuǎn)換為 commonjs 規(guī)范抹沪。即采用 require 去引用模塊刻肄,再加以一定的處理,符合es6的使用意圖融欧。
import export語法
import defaultExport from "module-name"; // 針對(duì) export default defaltExport 的情況
import { export } from "module-name"; // 針對(duì) export export的情況
import { export as alias } from "module-name"; // 針對(duì) export export的情況,且指定了引用名敏弃,在該文件內(nèi)可使用引用名進(jìn)行使用
import { export1 , export2 } from "module-name"; //從同一module中引用多個(gè)常量、函數(shù)噪馏、文件麦到、模塊等
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
export & import 的對(duì)象可以是常量、函數(shù)欠肾、對(duì)象瓶颠、文件、模塊等
defaultExport
導(dǎo)入模塊的默認(rèn)導(dǎo)出接口的引用名刺桃,一個(gè)文件只能有一個(gè)export defalt粹淋,其他文件import時(shí)不需要加{}
**注意:export default const a = 12這種寫法是會(huì)報(bào)錯(cuò)的,default后直接跟要導(dǎo)出的內(nèi)容瑟慈,如
export default new ApolloClient();
module-name
要導(dǎo)入的模塊桃移。通常是包含目標(biāo)模塊的.js文件的相對(duì)或絕對(duì)路徑名,可以不包括.js擴(kuò)展名葛碧。某些特定的打包工具可能允許或需要使用擴(kuò)展或依賴文件借杰,它會(huì)檢查比對(duì)你的運(yùn)行環(huán)境。只允許單引號(hào)和雙引號(hào)的字符串进泼。
name
導(dǎo)入模塊對(duì)象整體的別名蔗衡,在引用導(dǎo)入模塊時(shí),它將作為一個(gè)命名空間來使用缘琅。
export, exportN
被導(dǎo)入模塊的導(dǎo)出接口的名稱粘都。
alias, aliasN
將import的對(duì)象(常量、模塊刷袍、函數(shù)翩隧、文件等)在導(dǎo)入的文件中重命名(因?yàn)閷?dǎo)出的模塊必須與導(dǎo)入的模塊命名一致,通過重命名可以避免當(dāng)前程序中有與之相同的同名對(duì)象,在導(dǎo)入文件中可以使用該名稱進(jìn)行調(diào)用堆生。
如:
import { bark as dogBark } from ../helper/animal
// 在該文件使用時(shí)专缠,可以如下使用
const sound = dogBark.sound