什么是模块化

  • 文件作用域(模块是独立的,在不同的文件使用必须要重新引用)【在node中没有全局作用域,它是文件模块作用域】
  • 通信规则

    • 加载require
    • 导出exports

CommonJS模块规范

在Node中的JavaScript还有一个重要的概念,模块系统。

  • 模块作用域
  • 使用require方法来加载模块
  • 使用exports接口对象来导出模板中的成员

### 加载require

语法:

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

作用:

  • 执行被加载模块中的代码
  • 得到被加载模块中的exports导出接口对象

## 导出exports

  • Node中是模块作用域,默认文件中所有的成员只在当前模块有效
  • 对于希望可以被其他模块访问到的成员,我们需要把这些公开的成员都挂载到exports接口对象中就可以了

    导出多个成员(必须在对象中):

    exports.a = 123;
    exports.b = function(){
        console.log('bbb')
    };
    exports.c = {
        foo:"bar"
    };
    exports.d = 'hello';
导出单个成员(拿到的就是函数,字符串):
module.exports = 'hello';
以下情况会覆盖:
module.exports = 'hello';
//后者会覆盖前者
module.exports = function add(x,y) {
    return x+y;
}
也可以通过以下方法来导出多个成员:
module.exports = {
    foo = 'hello',
    add:function(){
        return x+y;
    }
};

模块原理

exports和module.exports的一个引用:

console.log(exports === module.exports);    //true

exports.foo = 'bar';

//等价于
module.exports.foo = 'bar';

当给exports重新赋值后,exports!= module.exports.

最终return的是module.exports,无论exports中的成员是什么都没用。

真正去使用的时候:
    导出单个成员:exports.xxx = xxx;
    导出多个成员:module.exports 或者 modeule.exports = {};
文章目录