exports 与module.exports的关系

    技术2022-07-11  94

    exports 与module.exports 父子关系

    文件作用域

    通信规则

    。加载 require

    1 语法:

    var 自定义变量名称 = require('模块')

    require 后发生了什么:

    ​ 1.执行被加载模块中的代码

    ​ 2. 得到被加载模块中的 exports 导出的接口对象

    导出 export

    在Node 中是模块作用域,默认文件中所有的成员只在当前文件模块中有效。

    对于洗完可以被其他模块访问的成员。我们就需要吧这些公开的成员过载到 exports 接口对象中就可以了。 导出多个对象(必须在对象中)

    exports.a = 123 export.b = 'hello' exports.c = function(){ console.log(a); } exports.d = { name:'tom' } //导出单个成员 拿到的是:函数,字符串 // 在Node中,每个模块内容都有一个自己的 module对象 //该module对象中,有一个成员叫: exports,也就一个对象。 // 就像下面这样 // var module = { // exports:{ // foo:'bar' // } // }

    注意下面情况 ,会被覆盖

    module.exports = 'hello' module.exports = function(x ,y){ //后一个会覆盖上面的 return x + y } //相当于重新赋值一次

    下面写法不会

    module.exports.foo = 'bar' module.exports.add = function(x ,y){ return x + y } 等同于 exports.foo = 'bar' exports.add = function(x ,y){ return x + y } //效果相同

    原理解析:

    //原因是:Node 为了简化你的操作,专门提供一个简写方法。 也就是说 在模块中还有这么一句代码 //var exports = module.exports //验证 //console.log(exports === module.exports); //$ node a.js //true

    那么导出多个呢

    可以这样 module.exports = { foo: 'bar', add: function(x, y) { return x + y } }

    是否可以直接给exports 直接赋值

    补充案例1

    (帮助理解exports 与module.exports 之间的关系)

    1. var obj = {} var obj1 = obj obj1.foo = 'bar' obj.foo = 'hello' obj1 = {} obj1.foo = 'world' console.log(obj1.foo); 2. 测试案例 exports.a = 123 exports = {} //修改了指向 exports.foo = 'bar' //存到了新地址 module.exports.b = 456 // 是原来的地址 打印: $ node a.js { a: 123, b: 456 } 解析: node.js底层代码处理: //谁来require我,谁就得到module.exports //默认在代码的最后又一句 return module.exports // 一定记住 ,最后return 的是 module.exports //不是exports ,所以你给exports重新赋值,不管用 //return module.exports

    案例2

    module.exports = '123' //修改了指向 exports = '456' //修改了指向 最后导出的是: 123 //return module.exports 真正使用的时候: 导出多个成员: exports.xxx =xxx, 也可以 module.exports = { } 导出单个成员: module.exports, 官网提示: 如果你分不清楚 export module.exports 关系, 写代码统统使用 moudle.exports = {}// 以上所有都可以不看,记住这一句就行了

    尾结:

    CommonJS 与 node.js的关系

    在 ES2015 标准之前,JavaScript 语言没有原生的组织代码的方式。Node.js 用 CommonJS 模块规范填补了这个空白。

    借鉴了。 就是这样。

    CommonJS 模块规范

    在Node.js 的 Javascript 还有一个很重要的概念:模块系统

    。模块作用域

    。使用require 方法用来加载模块 。使用exports接口对象用来导出模块中的 成员 ^-^ 笔记仅作为学习交流使用,如有异议请私信楼主删除。
    Processed: 0.015, SQL: 9