Node背景介紹
Node是一個js文件的執(zhí)行環(huán)境(類似于java的jvm),所以可以執(zhí)行任何js文件。在命令行輸入:node yourJSFileName.js 即可,執(zhí)行js文件中的內(nèi)容。
模塊化module
node.js模塊化系統(tǒng)中,每一個js文件都被看做是一個模塊module。在實際操作中,node既然可以執(zhí)行js文件,肯定一個文件解決的問題有限(不方便維護(hù))。所以,js文件可以引用其他js文件。詳細(xì)參考官方說明文檔: https://nodejs.org/api/modules.html
import && export
import & export 屬于ES6用法:
- Node 9 (?)之前不支持import & export,只能用require && module.exports
- jest測試框架目前不支持ES6
以上情況都需要使用babel對ES6的模塊輸出進(jìn)行處理,將所有輸出都賦值給exports,并帶上一個標(biāo)志_esModule標(biāo)明這個是由es6轉(zhuǎn)化來的ES5的commonjs輸出,再進(jìn)行編譯運(yùn)行。
babel將模塊的導(dǎo)出轉(zhuǎn)換為commonjs規(guī)范后,也會將引入 import 也轉(zhuǎn)換為 commonjs 規(guī)范。即采用 require 去引用模塊,再加以一定的處理,符合es6的使用意圖。
import export語法
import defaultExport from "module-name"; // 針對 export default defaltExport 的情況
import { export } from "module-name"; // 針對 export export的情況
import { export as alias } from "module-name"; // 針對 export export的情況,且指定了引用名,在該文件內(nèi)可使用引用名進(jìn)行使用
import { export1 , export2 } from "module-name"; //從同一module中引用多個常量、函數(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 的對象可以是常量、函數(shù)、對象、文件、模塊等
defaultExport
導(dǎo)入模塊的默認(rèn)導(dǎo)出接口的引用名,一個文件只能有一個export defalt,其他文件import時不需要加{}
**注意:export default const a = 12這種寫法是會報錯的,default后直接跟要導(dǎo)出的內(nèi)容,如
export default new ApolloClient();
module-name
要導(dǎo)入的模塊。通常是包含目標(biāo)模塊的.js文件的相對或絕對路徑名,可以不包括.js擴(kuò)展名。某些特定的打包工具可能允許或需要使用擴(kuò)展或依賴文件,它會檢查比對你的運(yùn)行環(huán)境。只允許單引號和雙引號的字符串。
name
導(dǎo)入模塊對象整體的別名,在引用導(dǎo)入模塊時,它將作為一個命名空間來使用。
export, exportN
被導(dǎo)入模塊的導(dǎo)出接口的名稱。
alias, aliasN
將import的對象(常量、模塊、函數(shù)、文件等)在導(dǎo)入的文件中重命名(因為導(dǎo)出的模塊必須與導(dǎo)入的模塊命名一致,通過重命名可以避免當(dāng)前程序中有與之相同的同名對象,在導(dǎo)入文件中可以使用該名稱進(jìn)行調(diào)用。
如:
import { bark as dogBark } from ../helper/animal
// 在該文件使用時,可以如下使用
const sound = dogBark.sound

使用舉例

