require和import差異
阿新 • • 發佈:2018-12-12
最近寫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物件