node.js中的require,exports使用說明

模塊是一門語言編寫大項目的基石,所以,瞭解如何組織、編寫、編譯、加載模塊很重要。這裏主要談談Node中的模塊加載。javascript

 1.Node中的模塊,主要使用require來加載模塊css

  • require("./") --- 加載本文件夾下面的package.json,若是沒有,則加載index.js、index.nodehtml

  • require("some.js") --加載本文件夾下面的some.js文件前端

  • require("lib/some.js") --加載lib/some.js文件vue

  • require("modulename") --加載當前目錄node_modules/modulename文件夾內的package.json,若是沒有,則加載index.js、index.node。若是當前目錄找不到以上內容,則進入指定全局模塊緩存目錄中加載modulename文件夾中的內容,如還未找到,則進入系統環境變量NODE_PATH指定的路徑中加載modulename文件夾內的內容。涉及到的目錄,請參看npm路徑設置。java

 2.Node中建立/導出模塊:module.exportsnode

  Module.exports纔是真正的接口,exports只不過是它的一個輔助工具。 最終返回給調用的是Module.exports而不是exports。webpack

  全部的exports收集到的屬性和方法,都賦值給了Module.exports。es6

  固然,這有個前提,就是Module.exports自己不具有任何屬性和方法。若是,Module.exports已經具有一些屬性和方法,那麼exports收集來的信息將被忽略。web

  修改rocker.js以下:

  module.exports = 'ROCK IT!';

  exports.name = function() {

  console.log('My name is Lemmy Kilmister');

  };

  //再次引用執行rocker.js :

  var rocker = require('./rocker.js');

  rocker.name(); // TypeError: Object ROCK IT! has no method 'name'
複製代碼

  發現報錯:對象「ROCK IT!」沒有name方法,rocker模塊忽略了exports收集的name方法,返回了一個字符串「ROCK IT!」。

  結論:

  1.模塊並不必定非得返回「實例化對象」。你的模塊能夠是任何合法的javascript對象--boolean, number, date, JSON, string, function, array等等。

  2.模塊能夠是任何你設置給它的東西。若是你沒有顯式的給Module.exports設置任何屬性和方法,那麼你的模塊就是exports設置給Module.exports的屬性。

  實例:

  module.exports = function(name, age) {

  this.name = name;

  this.age = age;

  this.about = function() {

  console.log(this.name +' is '+ this.age +' years old');

  };//歡迎加入全棧開發交流圈一塊兒學習交流:864305860 
      //面向1-3年前端人員
   //幫助突破技術瓶頸,提高思惟能力   
  };
複製代碼

  調用:

  ar Rocker = require('./rocker.js');

  var r = new Rocker('Ozzy', 62);

  r.about(); // Ozzy is 62 years old

  3.若是你的模塊是一個特定的類型,就用Module.exports;

  若是你模塊是一個典型的「實例化對象」就用exports。

  給Module.exports添加屬性相似於給exports添加屬性。例如:

  module.exports.name = function() {

  console.log('My name is Lemmy Kilmister');

  };
複製代碼

  一樣,exports是這樣的

  exports.name = function() {

  console.log('My name is Lemmy Kilmister');

  };
複製代碼

  請注意,這兩種結果並不想同。前面已經提到module.exports是真正的接口,exports只不過是它的輔助工具。推薦使用exports導出(實例化對象),除非你打算從原來的「實例化對象」改變成一個類型。

  注意,webpack 默認是支持es6的。因此,在 導入/導出模塊 的時候,也能夠用es6的寫法。

  小結:1.nodejs中的用 require,exports 處理模塊

     2..注意區別nodejs 與 es6中模塊導入,導出方法的不一樣之處

結語

感謝您的觀看,若有不足之處,歡迎批評指正。

本次給你們推薦一個免費的學習羣,裏面歸納移動應用網站開發,css,html,webpack,vue node angular以及面試資源等。 對web開發技術感興趣的同窗,歡迎加入Q羣:864305860,無論你是小白仍是大牛我都歡迎,還有大牛整理的一套高效率學習路線和教程與您免費分享,同時天天更新視頻資料。 最後,祝你們早日學有所成,拿到滿意offer,快速升職加薪,走上人生巔峯。

相關文章
相關標籤/搜索