gpt4 book ai didi

javascript - process.on ('uncaughtException' ) 在 ES6 模块中处理

转载 作者:行者123 更新时间:2023-12-03 02:24:27 26 4
gpt4 key购买 nike

我在 ES6 模块中有一个奇怪的行为:

index.mjs:

process.on('uncaughtException', err => {
console.log('Oh no!');
process.exit(1);
});

import mod from './module.mjs';

module.mjs:

export default 'foo';
throw new Error('I am broken');

我希望在运行 babel-node index.mjsnode --experimental-modules index.mjs 时执行 uncaughtException 处理程序,但事实并非如此。这将返回:

throw new Error('I am broken');
^

Error: I am broken
at Object.<anonymous> (mod.mjs:2:7)
...

使用良好的旧 CommonJS 模块,它可以工作:

index.js:

process.on('uncaughtException', err => {
console.log('Oh no!');
process.exit(1);
});

const mod = require('./module.js');

module.js:

module.exports = 'foo';
throw new Error('I am broken');

节点index.js返回:

Oh no!

这让我很困惑。这是设计使然吗?如果是这样,uncaughtException 处理程序将如何与 ES6 模块一起工作?任何想法表示赞赏!

最佳答案

ES6 导入是静态解析的,并且在模块中的任何代码运行之前加载(并执行)依赖项。对于 CommonJS 模块,只有在调用 require 后才会发生这种情况。

如果一个模块损坏严重,加载它会引发异常,则依赖于它的其他模块也不会运行。这几乎是设计使然。

但是您可以使用 dynamic imports并处理错误:

// index.mjs:
import('./module.mjs').then(mod => {

}, err => {
console.log('Oh no!');
process.exit(1);
});

关于javascript - process.on ('uncaughtException' ) 在 ES6 模块中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49012304/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com