ES6規範import和export用法總結
JavaScript模組規範
在任何一個大型應用中模組化是很常見的,與一些更傳統的程式語言不同的是,JavaScript6之前還不支援原生的模組化;Javascript社群做了很多努力,在現有的執行環境中,實現”模組”的效果。通行的JavaScript模組規範主要有兩種:CommonJS、AMD
CommonJS規範是伺服器端Javascript模組規範(同步)
Node.js的模組系統,就是參照CommonJS規範實現的。NPM也遵循了commonJS定義的包規範,從而形成了一套完整的生態系統
AMD意思是”非同步模組定義”,是前端模組規範
RequireJS就是實現了AMD規範的
CommonJS module以伺服器端為第一的原則發展,選擇同步載入模組。它的模組是無需包裝的,但它僅支援物件型別(objects)模組
AMD以瀏覽器為第一的原則發展,選擇非同步載入模組。它的模組支援物件、函式、構造器、字串、JSON等各種型別的模組,因此在瀏覽器中它非常靈活
ES6模組的import和export用法總結
ES6之前已經出現了js模組載入的方案,最主要的是
commonjs 伺服器 同步載入 如nodejs
AMD 瀏覽器 非同步載入 如requirejs
ES6在語言規格的層面上,實現了模組功能,而且實現得相當簡單
完全可以取代現有規範,成為瀏覽器和伺服器通用的模組解決方案
執行時載入
CommonJS模組是物件,實質是整體載入模組(即載入fs的所有方法),生成一個物件,然後再從這個物件上面讀取其中3個方法這種載入稱為“執行時載入”,因為只有執行時才能得到這個物件
編譯時載入
ES6模組不是物件,是通過export命令顯式指定輸出的程式碼,再通過import命令輸入
的實質是從fs模組載入3個方法,其他方法不載入。這種載入稱為“編譯時載入”或者靜態載入,即ES6可以在編譯時確定模組的依賴關係,以及輸入和輸出的變數,效率更高
ES6模組主要有兩個功能:export和import
export用於對外輸出本模組(一個檔案可以理解為一個模組)變數的介面
import用於在一個模組中載入另一個含有export介面的模組。
也就是說使用export命令定義了模組的對外介面以後,其他JS檔案就可以通過import命令載入這個模組(檔案)。如下圖(假設a和b檔案在同一目錄下)
// a.js
var sex=”boy”;
var echo=function(value){
console.log(value)
}
export {sex,echo}
//通過向大括號中新增sex,echo變數並且export輸出,就可以將對應變數值以sex、echo變數識別符號形式暴露給其他檔案而被讀取到
1.export {sex,echo}
-
[不用] export default命令,為模組指定預設輸出 其實只是輸出一個叫做default的變數
(1)[只能預設輸出單個,不能是物件]
var abc=function(){}export default abc
import xx from `./a.js`
xx()
(2)如果想在一條import語句中,同時輸入預設方法和其他介面
var abc=function(){}
var cba=function(){}
var bac=function(){}
export default abc
export {cba}
import xx,{cba,bac} from `./a.js`
xx() cba() bac()
// b.js
通過import獲取a.js檔案的內部變數,{}括號內的變數來自於a.js檔案export出的變數識別符號。
import {sex,echo} from “./a.js”
console.log(sex) // boy
echo(sex) // boy
1.import命令接受一對大括號,裡面指定要從其他模組匯入的變數名
大括號裡面的變數名,必須與被匯入模組(profile.js)對外介面的名稱相同
import {sex,echo} from “./a.js”
2.除了指定載入某個輸出值,還可以使用整體載入,即用星號(*)指定一個物件,所有輸出值都載入在這個物件上面
import * as xx from `./circle`;
console.log(`圓面積:` + xx.area(4));
以上是export與import的基本用法,再進行擴充學習
前面的例子可以看出,b.js使用import命令的時候,使用者需要知道a.js所暴露出的變數識別符號
使用export default命令,為模組指定預設輸出,這樣就不需要知道所要載入模組的變數名
//a.js
var sex=”boy”;
export default sex(sex不能加大括號)
//一個檔案內最多隻能有一個export default
其實此處相當於為sex變數值”boy”起了一個系統預設的變數名default,自然default只能有一個值
// b.js
本質上,a.js檔案的export default輸出一個叫做default的變數,然後系統允許你為它取任意名字。所以可以為import的模組起任何變數名,且不需要用大括號包含
import any from “./a.js”
import any12 from “./a.js”
console.log(any,any12) // boy,boy
import和export這兩個命令現在在任何瀏覽器中都是不支援的, 同時babel也無法將其轉換為瀏覽器支援的ES5, 原因在於:
babel只是個翻譯,假設a.js 裡 import 了 b.js, 對a.js進行轉碼,只是翻譯了a.js,並不會把b.js的內容給讀取合併進來, 如果想在最終的某一個js裡包含 a.js,b.js 的程式碼,那就需要用到打包工具
所以我在這裡講解一下如何使用webpack工具將帶有import和export語法的JS檔案, 通過打包工具生成所有瀏覽器都支援的單個JS檔案
相關文章
- JS/TS 的 import 和 export 用法小結JSImportExport
- ES6模組化之export和import的用法ExportImport
- 詳解es6的export和import命令ExportImport
- ES6 export && export default 差異總結Export
- ES6 module模組 import exportImportExport
- node識別es6的 import/exportImportExport
- export/importExportImport
- 探討ES6的import export default 和CommonJS的require module.exportsImportExportJSUI
- ES6 export 和 export default的區別Export
- import、require 、export、export default、exports、module exportsImportUIExport
- 通過 babel-node 執行 ES6 import/export 語法BabelImportExport
- import,export的支援[nodejs]ImportExportNodeJS
- Import Error: cannot import name ‘export_saved_modelImportErrorExport
- SQL語句規範總結SQL
- Export/import Datas To/from a Csv FileExportImport
- 如何讓瀏覽器支援 import 和export語法瀏覽器ImportExport
- web前端開發規範總結Web前端
- restful介面設計規範總結REST
- 新手關於import/export的理解ImportExport
- JavaScript ES6中,export與export defaultJavaScriptExport
- ES6:export 與 export default 區別Export
- php-psr-chinese psr規範總結PHP
- Nodejs中exports和module.exports與ES6中的export default 和 export 區別NodeJSExport
- ES6 Promise用法小結Promise
- 這幾個概念你可能還是沒搞清require、import和exportUIImportExport
- 個人總結——全面的『Python編碼規範』Python
- 【深度】規範ERP之路走到今日的得失總結
- 【ES6總結】
- CommonJS,AMD,CMD,ES6,require 和 import 詳解JSUIImport
- Promise用法總結Promise
- layui用法總結UI
- axios用法總結iOS
- less用法總結
- pandas用法總結
- Const 用法總結
- [資料庫]【MySQL】MySQL資料庫規範總結資料庫MySql
- Java基本資料型別總結、型別轉換、常量的宣告規範,final關鍵字的用法Java資料型別
- export 和 export default 區別Export