Node.js全局定制require函数

时间:2013-11-11 09:55:43

标签: node.js module

我正在尝试像这样修改require

require = function (path) {
    try {
        return module.require(path);
    } catch (err) {
        console.log(path)
    }
}

但是,此修改的范围仅在当前模块中。我想全局修改它,因此该模块require d的每个模块也将获得require函数的相同副本。

基本上,我想抓住SyntaxError来了解哪个文件有问题。我似乎找不到任何其他选择。如果我将module.require放在try/catch块中,我将能够获取导致SyntaxError的文件名。

2 个答案:

答案 0 :(得分:7)

我设法通过修改require类的原型函数Module来解决它。我将它放在主脚本中,并且可用于所有require d模块。

var pathModule = require('path');
var assert = require('assert').ok;

module.constructor.prototype.require = function (path) {
    var self = this;
    assert(typeof path === 'string', 'path must be a string');
    assert(path, 'missing path');

    try {
        return self.constructor._load(path, self);
    } catch (err) {
        // if module not found, we have nothing to do, simply throw it back.
        if (err.code === 'MODULE_NOT_FOUND') {
            throw err;
        }
        // resolve the path to get absolute path
        path = pathModule.resolve(__dirname, path)

        // Write to log or whatever
        console.log('Error in file: ' + path);
    }
}

答案 1 :(得分:0)

为什么不在代码中使用try-catch块,一旦发生错误就检查堆栈跟踪。看看这些链接