1. 程式人生 > >require和import差異

require和import差異

  最近寫vue過程中,發現前人的程式碼,有的引入模組是以require引入,有的是以import引入,到底兩者有什麼差異呢?

  一、他們遵循的模組化規範不一樣

    所謂模組化,即為javascript提供的一個模組編寫、模組依賴、模組執行的規範。

    require/exports是一種野生規範。什麼是野生規範?野生規範是在javascript社群的開發者自己定義的,並且得到很多人認可,但是還未正式的收入js規範中,但是收入到了CommonJS規範中。相比require的野生規範,import/export血統就純正多了,他是在ES6中正式被提出。

  二、出現的時間不一致

    require/exports出現在2010年左右。此時不得不提webpack和nodeJS。webpack是對CommonJS模組進行打包,而nodeJS一直沿用CommonJS作為規範。直到2015年,出現ES6,然而ES6與CommonJS差異較大,nodeJS一直不相容ES6,這裡還特別應該感謝下Babel,他把所有還未被各宿主(各瀏覽器,nodeJS)接受的ES6 Module統統編譯為ES5的CommonJS語法。所以import/export雖然存在,但是到最後還是被編譯成require了。

  三、使用方法不一致

    require只有3種方式:    

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

    import方式就多種多樣了:    

import fs from 'fs'
import * from 'fs'
import {default as fs}from 'fs'
import {* as fs} from 'fs'
import {moduleName as fs} from 'fs'
import {moduleName} from 'fs'

export default fs
export const moduleName
export function moduleName
export {moduleName1,moduleName2}
export * from 'fs'

  雖然說了這麼多的差一點,但是他們本質上都是把輸出的內容看成是一個物件,可以在其他地方直接引入。

  tips:default是ES6的關鍵字,export default fs可以把fs作為預設的介面物件輸出,import fs from 'fs'直接引入預設的fs物件