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.mjs
或node --experimental-modules index.mjs
时执行 uncaughtException 处理程序,但事实并非如此。这将返回:
throw new Error('I am broken');
^
Error: I am broken
at Object.<anonymous> (mod.mjs:2:7)
...
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');
node index.js
返回:
Oh no!
这让我很困惑。这是设计,如果是这样, uncaughtException 处理程序如何与ES6模块一起使用?任何想法都赞赏!
答案 0 :(得分:1)
静态解析ES6导入,并在模块中的任何代码运行之前加载(并执行)依赖项。使用CommonJS模块,只有在您调用require
时才会发生。
如果一个模块破坏了加载它会抛出异常,那么依赖它的其他模块也不会运行。这几乎是设计上的。
但是,您可以使用dynamic imports并处理错误:
// index.mjs:
import('./module.mjs').then(mod => {
…
}, err => {
console.log('Oh no!');
process.exit(1);
});