2015-06-02 151 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();