module.exports与exports,export与export default之间的关系和区别
生活随笔
收集整理的這篇文章主要介紹了
module.exports与exports,export与export default之间的关系和区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
CommonJS模塊規范和ES6模塊規范完全是兩種不同的概念。
CommonJS模塊規范:
????????
根據這個規范,每個文件就是一個模塊,有自己的作用域。在一個文件里面定義的變量、函數、類,都是私有的,對其他文件不可見。
CommonJS規范規定,每個模塊內部,module變量代表當前模塊。這個變量是一個對象,它的exports屬性(即module.exports)是對外的接口。加載某個模塊,其實是加載該模塊的module.exports屬性。
var x = 5; var addX = function (value) {return value + x; }; module.exports.x = x; module.exports.addX = addX;// 上面代碼通過module.exports輸出變量x和函數addX。require方法用于加載模塊。var example = require('./example.js');console.log(example.x); // 5 console.log(example.addX(1)); // 6exports 與 module.exports
為了方便,Node為每個模塊提供一個exports變量,指向module.exports。這等同在每個模塊頭部,有一行這樣的命令。
優先使用 module.exports
var exports = module.exports;
module.exports / exports: 只有 node 支持的導出
require: node 和 es6 都支持的引入--{遵循的是CommonJS規范}
exports只輔助module.exports操作內存中的數據,各種操作數據完,結果到最后真正被require出去的內容還是module.exports
其實大家用內存塊的概念去理解,就會很清楚了。
然后呢,為了避免糊涂,盡量都用?module.exports?導出,然后用require導入
ES6模塊規范
不同于CommonJS,ES6使用 export 和 import 來導出、導入模塊。
// profile.js var firstName = 'Michael'; var lastName = 'Jackson'; var year = 1958;export {firstName, lastName, year};//需要特別注意的是,export命令規定的是對外的接口,必須與模塊內部的變量建立一一對應關系。//export default// 使用export default命令,為模塊指定默認輸出 // export-default.js export default function () {console.log('foo'); }export 和 export?default區別:
export / import?: 只有es6 支持的導出引入
testEs6Export.js
'use strict'
//導出變量
export const a = '100'; //導出方法
export const dogSay = function(){ console.log('wang wang');
}//導出方法第二種
function catSay(){console.log('miao miao');
}
export { catSay };//export default導出
const m = 100;
export default m;
//export defult const m = 100;// 這里不能寫這種格式。//index.js
'use strict'
var express = require('express');
var router = express.Router();import { dogSay, catSay } from './testEs6Export'; //導出了 export 方法
import m from './testEs6Export'; //導出了 export default import * as testModule from './testEs6Export'; //as 集合成對象導出/* GET home page. */
router.get('/', function(req, res, next) {dogSay();catSay();console.log(m);testModule.dogSay();console.log(testModule.m); // undefined , 因為 as 導出是 把 零散的 export 聚集在一起作為一個對象,而export default 是導出為 default屬性。console.log(testModule.default); // 100res.send('恭喜你,成功驗證');
});module.exports = router;
?
ES6的模塊系統非常靈活。
總結
以上是生活随笔為你收集整理的module.exports与exports,export与export default之间的关系和区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国家统计局数据下载
- 下一篇: Websocket--- long lo