module.exports 與 export

首先咱們要明白一個前提,CommonJS模塊規範和ES6模塊規範徹底是兩種不一樣的概念。javascript

CommonJS模塊規範

Node應用由模塊組成,採用CommonJS模塊規範。html

根據這個規範,每一個文件就是一個模塊,有本身的做用域。在一個文件裏面定義的變量、函數、類,都是私有的,對其餘文件不可見。java

CommonJS規範規定,每一個模塊內部,module變量表明當前模塊。這個變量是一個對象,它的exports屬性(即module.exports)是對外的接口。加載某個模塊,實際上是加載該模塊的module.exports屬性。node

var x = 5; var addX = function (value) { return value + x; }; module.exports.x = x; module.exports.addX = addX; 

上面代碼經過module.exports輸出變量x和函數addX。es6

require方法用於加載模塊。函數

var example = require('./example.js'); console.log(example.x); // 5 console.log(example.addX(1)); // 6 

exports 與 module.exports

爲了方便,Node爲每一個模塊提供一個exports變量,指向module.exports。這等同在每一個模塊頭部,有一行這樣的命令。ui

var exports = module.exports; 

因而咱們能夠直接在 exports 對象上添加方法,表示對外輸出的接口,如同在module.exports上添加同樣。注意,不能直接將exports變量指向一個值,由於這樣等於切斷了exports與module.exports的聯繫。spa

ES6模塊規範

不一樣於CommonJS,ES6使用 export 和 import 來導出、導入模塊。code

// profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958; export {firstName, lastName, year}; 

須要特別注意的是,export命令規定的是對外的接口,必須與模塊內部的變量創建一一對應關係。htm

// 寫法一 export var m = 1; // 寫法二 var m = 1; export {m}; // 寫法三 var n = 1; export {n as m}; 

export default 命令

使用export default命令,爲模塊指定默認輸出。

// export-default.js export default function () { console.log('foo'); } 

相關連接:
CommonJS規範,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的語法,http://es6.ruanyifeng.com/#docs/module

相關文章
相關標籤/搜索