前端总结

nodeJS基础二 模块

2019-06-05  本文已影响0人  辛未羊的前端随笔

模块

在nodeJS中一个文件就是一个模块,这个模块本质就是一个函数

模块化

CommonJs exports(导出) require(导入)
es6 export(导出) import(导入)
AMD define(导出) require(导入)
模块的定义
module.exports,在module.exports对象上添加属性导出值
exports,在exports对象上添加属性导出值
exports对象和module.exports是同一个对象
exports对象添加属性来导出值
module.exports对象可以赋值一个对象导出值
导出的始终是module.exports指向的对象

模块引用

rquire("文件名"),执行对应的文件并返回该文件对象的module.exports对象

module.exports是什么

新建module_001.js

  console.log(module);

node输出

  Module {
    id: '.',
    exports: {},
    parent: null,
    filename: 'F:\\work\\layUiDemo\\server\\module_001.js',
    loaded: false,
    children: [],
    paths:
     [ 'F:\\work\\layUiDemo\\server\\node_modules',
       'F:\\work\\layUiDemo\\node_modules',
       'F:\\work\\node_modules',
       'F:\\node_modules' ] }

可以看到module是一个对象,module里面有exports对象
那么module.exports 跟exports有什么关系呢?
修改module_001.js

  console.log(module.exports === exports); //输出true  说明他们两个指向同一个对象

module.exports 与 exports 的区别

新建module_001.js 和 module_002.js
module_001.js

  let str  = 'Hello';
  let obj = {
      name:'tom',
      age:'18'
  };
  let fn = ()=>{
      console.log('fn.........')
  }
  module.exports.str=str;
  exports.obj = obj;
  exports.fn = fn;

module_002.js

  const allObj = require('./module_001');
  console.log(allObj)

输出

  { str: 'Hello',
    obj: { name: 'tom', age: '18' },
    fn: [Function: fn] }

前面我们说了module.exports 与exports 他们两个指向同一个对象
现在我们改变module_001.js

  let str  = 'Hello';
  let obj = {
      name:'tom',
      age:'18'
  };
  let fn = ()=>{
      console.log('fn.........')
  }
  exports = {
      str,
      obj,
      fn
   }

输出是空,我们把exports换成module.exports发现输出就正常了。其原因在于,一开始module.exports 与 exports指向同一个对象,当exports = {} 的时候 就改变了exports的指向。require() 方法返回的是module.exports

上一篇下一篇

猜你喜欢

热点阅读