node.js:抑制require()对解析错误的回显到stderr

node.js: suppress require()'s echoing of parse errors to stderr

本文关键字:错误 stderr js 抑制 require node      更新时间:2023-10-16

node.js 10.26将正确抛出一个错误,当你试图要求一个文件不是有效的javascript(或JSON)。

我的问题是它输出到stderr:

broken .js -知道是破碎的javascript文件

,,>Z>badfile!=-csa&asd;'asdl ds]=}{ADS}DAS:LMFSV'

. js

try {
    var borken = require('./borken');
} catch (e) {} finally {
    console.log('finally!');
}
预期

$ node test.js
finally!
实际

$ node test.js
    /path/to/borken.js:1
(function (exports, require, module, __filename, __dirname) { asd;'asdl
                                                                  ^^^^^
finally!

前三行输出到stderr(当node test.js 2> /dev/null抑制它们时运行)。

有办法摆脱他们吗?

我到目前为止所做的:我在跟踪源代码的同时进行调试,并将罪魁祸首缩小到:

lib/module.js: 439

var compiledWrapper = runInThisContext(wrapper, filename, true); 

runInThisContext是在lib/vm.js中定义的,不幸的是它是一个c++包装器,所以我不能真正遵循那里发生的事情。我想我正在寻找一个神奇的"不要发送垃圾邮件"标志或任何关于这在任何最新版本中被修复的知识。

显然这个问题已经在开发分支(0.11.x)中修复了,但在最新的稳定版本(0.10.29)中没有修复

Github问题:语法错误被打印为stderr,即使使用try/catch #6920