nodejs中的require,exports使用說明

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

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

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

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

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

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

 

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

 

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

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

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

  修改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');

  };

  };

  調用:

  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中模塊導入,導出方法的不一樣之處

相關文章
相關標籤/搜索