标签:info 块对象 zha moudle name imp 文件 调用 常量
module.exports 是模块系统创建的(全局内置对象);当你创建完成一个模块时,需要将此模块暴露出去,以便使用;module.exports 便提供了暴露出去的接口方法;
/**创建模块 module.exports.js */ let object = { name: ‘zhangsan‘, age: 24, hasSay: () => { console.info(‘This is zhangsan‘) } } module.exports = object; /**引用模块 server.js */ const Obj = require(‘./module.exports.js‘) console.log(‘---->‘, Obj)
或者:
/**创建模块 module.exports.js */ function fn1 () { console.info(‘fn1‘); } function fn2 () { console.info(‘fn2‘); } exports.fn1 = fn1; exports.fn2 = fn2; /**引用模块 server.js */ const fn = require(‘./module.exports.js‘) console.log(‘---->‘, fn.fn1, fn.fn2);
/**创建模块 module.exports.js */ class Person { constructor (name) { this.name = name console.info(‘name:‘, name); } } module.exports = Person; /**引用模块 server.js */ const Person = require(‘./module.exports.js‘) console.log(‘---->‘, new Person(‘lisi‘));
1. 语法区别:
exports.[function name] = [function name] moudle.exports= [function name]
2. 本质区别:
exports 暴露出的是一个模块中的某个函数;
module.exports 暴露出模块对象本身(其实就是一个类);
3. 使用区别:
exports 暴露出的函数可以直接调用;
module.exports 暴露出的类需要实例出对象;
注意:当 module.exports 和 exports 同时存在于一个模块中时,以 module.exports 暴露出去的方法为主;
/**创建模块 module.exports.js */ function fn () { console.info(‘fn‘); } exports.fn = fn; console.log(‘module.exports->‘, module.exports); // Object { fn: } console.log(‘exports->‘, exports); // Object { fn: } console.log(‘查看两者是否相等:‘, module.exports === exports); // true
module.exports 和 exports 是一个对象并且都有 fn 方法;module.exports === exports 结果为 true,说明两者指向同一个对象;
/**创建模块 module.exports.js */ function fn () { console.info(‘fn‘); } module.exports = fn; console.log(‘module.exports->‘, module.exports); // fn () {...} console.log(‘exports->‘, exports); // {} console.log(‘查看两者是否相等:‘, module.exports === exports); // false
此时module.exports 和 exports 两者的指向不同;module.exports 地址指向 fn 方法;exports 地址指向还是原来对象;
CommonJs 规范(module.exports / exports ; require);
ES6(export / import);
require : node 和 ES6 都支持的导入;
export / import: ES6支持的导入和导出;
module.exports / exports:node支持的导出;
我们需要知道 Nodejs 里面的模块系统都是遵循 CommonJs 规范的;
CommonJs 定义的模块分为:模块标识(module);模块定义(exports);模块引入(require)
node在执行一个文件时,会在文件中生成一个exports 和 module 对象,module 对象又有一个exports 属性。
exports 和 module.exports 的关系:两者都是指向同一个对象;
exports = module.exports = {}
彻底搞懂 module.exports/exports/import/export/export default
标签:info 块对象 zha moudle name imp 文件 调用 常量
原文地址:https://www.cnblogs.com/idspring/p/12271439.html