模塊是一門語言編寫大項目的基石,所以,瞭解如何組織、編寫、編譯、加載模塊很重要。這裏主要談談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,快速升職加薪,走上人生巔峯。