require至關於module.exports的傳送門,module.exports後面的內容是什麼,require的結果就是什麼,對象、數字、字符串、函數……再把require的結果賦值給某個變量,至關於把require和module.exports進行平行空間的位置重疊。 並且require理論上能夠運用在代碼的任何地方,甚至不須要賦值給某個變量以後再使用,好比: require('./a')(); // a模塊是一個函數,當即執行a模塊函數 var data = require('./a').data; // a模塊導出的是一個對象 var a = require('./a')[0]; // a模塊導出的是一個數組 在使用時,徹底能夠忽略模塊化這個概念來使用require,僅僅把它當作一個node內置的全局函數,它的參數甚至能夠是表達式: require(process.cwd() + '/a'); 可是import則不一樣,它是編譯時的(require是運行時的),它必須放在文件開頭,並且使用格式也是肯定的,無可置疑。它不會將整個模塊運行後賦值給某個變量,而是隻選擇import的接口進行編譯,這樣在性能上比require好不少。 從理解上,require是賦值過程,import是解構過程 ES7很快也會發布,js引擎們會盡快實現ES6標準的規定,若是一個引擎連標準都實現不了,就會被淘汰, ES6是早晚的事 。若是你如今仍然在代碼中部署require,那麼等到ES6被引擎支持時,你必須升級你的代碼,而若是如今開始部署import,那麼將來可能只須要作不多的改動。