Node.js自定义要求全局函数

Node.js自定义要求全局函数,node.js,module,Node.js,Module,我正试图这样修改require require = function (path) { try { return module.require(path); } catch (err) { console.log(path) } } 但是,此修改的范围仅在当前模块中。我想对其进行全局修改,因此此模块创建的required模块也将获得相同的require函数副本 基本上,我想捕获SyntaxError,以了解哪个文件有问题。我似乎找不到其他

我正试图这样修改
require

require = function (path) {
    try {
        return module.require(path);
    } catch (err) {
        console.log(path)
    }
}
但是,此修改的范围仅在当前模块中。我想对其进行全局修改,因此此模块创建的
require
d模块也将获得相同的
require
函数副本


基本上,我想捕获SyntaxError,以了解哪个文件有问题。我似乎找不到其他的选择。如果我将
module.require
放入
try/catch
块中,我将能够获得导致
SyntaxError

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


我通过修改
模块
类的原型函数
require
解决了这个问题。我把它放在主脚本中,它可用于所有
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);
    }
}

我不能在任何需要模块的地方使用try-catch。并告诉用户遵循同样的方法。这就是为什么我想让它对用户透明。那怎么办呢。您可以将其放在主模块中并捕获所有这些错误,这些错误通常会发送到控制台。
uncaughtException
在您想要捕获
SyntaxError
时没有多大帮助,因为它不会给您出现错误的文件名。节点只是打印带有错误文件片段的文件名。它没有在stacktrace中提供该文件。这似乎很有希望,但它在节点8上对我不起作用。我将修改放在mod.js中,并使用Mocha的--require选项在所有测试文件之前加载它,但唉。。。