【ES6】import, require,export

node編程中最重要的思想就是模塊化,importrequire都是被模塊化所使用。html

遵循規範
  • require 是 AMD規範引入方式
  • import是es6的一個語法標準,若是要兼容瀏覽器的話必須轉化成es5的語法
調用時間
  • require是運行時調用,因此require理論上能夠運用在代碼的任何地方
  • import是編譯時調用,因此必須放在文件開頭
本質
  • require是賦值過程,其實require的結果就是對象、數字、字符串、函數等,再把require的結果賦值給某個變量
  • import是解構過程,可是目前全部的引擎都尚未實現import,咱們在node中使用babel支持ES6,也僅僅是將ES6轉碼爲ES5再執行,import語法會被轉碼爲require

 

 

require / exports :
遵循 CommonJS/AMD,只能在運行時肯定模塊的依賴關係及輸入/輸出的變量,沒法進行靜態優化。
用法只有如下三種簡單的寫法:node

const fs = require('fs')
exports.fs = fs
module.exports = fs

import / export:
遵循 ES6 規範,支持編譯時靜態分析,便於JS引入宏和類型檢驗。動態綁定。
寫法就比較多種多樣:es6

import fs from 'fs'
import {default as fs} from 'fs'
import * as fs from 'fs'
import {readFile} from 'fs'
import {readFile as read} from 'fs'
import fs, {readFile} from 'fs'

export default fs
export const fs
export function readFile
export {readFile, read}
export * from 'fs'

  1. 經過require引入基礎數據類型時,屬於複製該變量。
  2. 經過require引入複雜數據類型時,數據淺拷貝該對象。
  3. 出現模塊之間的循環引用時,會輸出已經執行的模塊,而未執行的模塊不輸出(比較複雜)
  4. CommonJS模塊默認export的是一個對象,即便導出的是基礎數據類型
加載方式 規範 命令 特色
運行時加載 CommonJS/AMD require 社區方案,提供了服務器/瀏覽器的模塊加載方案。非語言層面的標準。只能在運行時肯定模塊的依賴關係及輸入/輸出的變量,沒法進行靜態優化。
編譯時加載 ESMAScript6+ import 語言規格層面支持模塊功能。支持編譯時靜態分析,便於JS引入宏和類型檢驗。動態綁定

 

 

 

 

 

相關資料:https://www.cnblogs.com/sunshq/p/7922182.html編程

     https://www.cnblogs.com/ariel-zhang/p/7127714.html瀏覽器

     http://www.javashuo.com/article/p-etfysaad-cp.html服務器

相關文章
相關標籤/搜索