2015-06-02 192 views
2

我試圖用下面的模式製作一個簡單的NodeJS模塊:module.exports = function() {}。 我的問題是,當我寫exports.myFunc = myFunc;它運作良好,但是當我寫module.exports = myFunc;它不起作用。創建一個NodeJS模塊

下面是我的一些代碼片段:

function.js:

var fs = require('fs'); 
var path = require('path'); 

var i = 0; 

function getFilesByExtArgs (dir, ext){ 
    fs.readdir(dir, function (err, data){ 
       while (i <= data.length){ 
        if (path.extname(data[i]) == ('.' + ext)) 
         console.log(data[i]); 
        i++; 
       } 
     }); 
} 

exports.getFilesByExtArgs = getFilesByExtArgs; 

module.js:

var myModule = require('./listFilesByExtArgs'); 

myModule.getFilesByExtArgs(process.argv[2], process.argv[3]); 

我怎樣才能讓我的代碼工作與需要圖案嗎?

+0

8個空格的縮進? Eww ... –

+0

@GabrielTomitsuka自動縮進Emacs .. – Mehdi

回答

3

這是因爲module.exportsexports.property的行爲不同。所以,當你寫module.exports = myFunc;你有效地做一個完整的模塊作爲一個func。它使用以下方式:

var myModule = require('./listFilesByExtArgs'); 
// In mymodule is actually alias to a func listFilesByExtArgs 
myModule(process.argv[2], process.argv[3]); 

可以找到完整答案here

+0

Thx爲您的解釋@ vanadium23。 – Mehdi

1
module.exports = myFunc 

導出myFunc的函數作爲模塊而

exports.myFunc = myFunc 

導出myFunc的功能與所導出模塊的myFunc的屬性。

讓你無論是使用

// case: module.exports = myFunc 
var myModule = require('myModule'); 
myModule(); 

// case: exports.myFunc = myFunc 
var myModule = require('myModule'); 
myModule.myFunc();