nodeJS基礎二 模塊

模塊

在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章