首先我們要明白一個前提,CommonJS
模塊規(guī)范和ES6
模塊規(guī)范完全是兩種不同的概念凰萨。
CommonJS模塊規(guī)范
Node應(yīng)用由模塊組成继控,采用CommonJS模塊規(guī)范。
根據(jù)這個規(guī)范胖眷,每個文件都是一個模塊武通,有自己的作用域。在一個文件里定義的變量珊搀、函數(shù)冶忱、類、都是私有的境析,對其他他文件不可見囚枪。
CommonJS
規(guī)范規(guī)定,每個模塊內(nèi)部劳淆,module
變量代表當(dāng)前模塊链沼。這個變量是一個對象,它的exports
屬性(即沛鸵,exports.module)的對外的接口括勺。加載某個模塊,其實就是加載該模塊的module.exports
屬性曲掰。
var x = 5;
var addX = function (value) {
return value + x;
};
module.exports.x = x;
module.exports.addX = addX;
上面代碼通過module.expots
輸出變量x
和函數(shù)addX
require
方法用于加載模塊朝刊。
var example = require('./example.js');
console.log(example.x); // 5
console.log(example.addX(1)); // 6
exports
與 module.exports
為了方便,Node為每個模塊提供一個exports
變量蜈缤,指定module.exports
拾氓。這 等同于在每個模塊頭部,有一行下面這樣的命令
var exports = module.exports
于是我們直接在exports
對象上添加方法底哥,表示對外輸出的接口咙鞍,如同在module.exports
上添加一樣,注意趾徽,不能直接將exports
直接指向一個值续滋,這樣等同于切斷了exports
和module.exports
的聯(lián)系。
ES6模塊規(guī)范
不同于CommonJS
孵奶,ES6使用export
和import
來導(dǎo)出疲酌、導(dǎo)入模塊。
// profile.js
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export {firstName, lastName, year};
需要特別注意的是,export
命令規(guī)定的是對外接口朗恳,必須與模塊內(nèi)部的變量建立--對應(yīng)關(guān)系湿颅。
// 寫法一
export var m = 1;
// 寫法二
var m = 1;
export {m};
// 寫法三
var n = 1;
export {n as m};
export default
命令
使用exports default
命令,為模塊指定默認(rèn)輸出粥诫。
// export-default.js
export default function () {
console.log('foo');
}
相關(guān)鏈接:
CommonJS規(guī)范油航,http://javascript.ruanyifeng.com/nodejs/module.html
ES6 Module 的語法,http://es6.ruanyifeng.com/#docs/module
本傳轉(zhuǎn)載https://www.cnblogs.com/fayin/p/6831071.html 如有侵權(quán)怀浆,立即刪除