关于node.js:导出模块的正确方法

Correct way of exporting module

本问题已经有最佳答案,请猛点这里访问。

假设我有下面的模块makeDir,它检查目录是否存在,如果目录不存在,则创建一个,如果目录已经存在,则只使用空值调用其回调。

导出此模块的正确方法是什么?

module.exports = makeDir还是module.exports.makeDir = makeDir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'use strict';

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

var makeDir = {};

makeDir.handler = function (dstPath, sizesObj, callback) {

    var _path = dstPath + sizesObj.name +"/";

    fs.lstat(_path, function (err, stats) {
        if (err) {
            mkdirp(_path, function (err, made) {
                if (err) {
                    console.log("Error creating directory: %s", err);
                    callback (err, null);
                } else {
                    console.log("Created new directory");
                    callback(null, made);
                }
            });
        } else {
            callback(null);
        }
    });
};

module.exports = makeDir;


使用module.exports或module.exports.functionu name的两种方法都可以,但在需要这些函数时会有不同。

让我用一个例子来说明区别。

a.将功能直接分配给模块输出

1
2
3
4
5
6
7
8
// mkdir.js
module.exports = function(){
       console.log("make directory function");
};

// app.js
var mkdir = require("mkdir.js");
mkdir(); // prints make directory function

b.在module.exports属性中导出函数

1
2
3
4
5
6
7
8
// mkdir.js
module.exports.first = function(){
                     console.log('make directory function');
};

// app.js
var mkdir = require('mkdir.js');
mkdir.mkdir(); // make directory function

希望它有帮助!


module.exports = makeDir;

如果只从javascript文件导出一个对象,则是正确的方法。

如果需要导出多个对象

1
2
3
4
5
var makeDir = {
 obj1 : function(){},
 obj2 : function(){}
}
module.exports = makeDir;

这样,您就可以在其他文件中使用makeDir.obj1makeDir.obj2