我正在尝试像这样修改require
require = function (path) {
try {
return module.require(path);
} catch (err) {
console.log(path)
}
}
但是,此修改的范围仅在当前模块中。我想全局修改它,因此该模块require
d的每个模块也将获得require
函数的相同副本。
基本上,我想抓住SyntaxError
来了解哪个文件有问题。我似乎找不到任何其他选择。如果我将module.require
放在try/catch
块中,我将能够获取导致SyntaxError
的文件名。
答案 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块,一旦发生错误就检查堆栈跟踪。看看这些链接