node.js - ES6 导入错误处理

标签 node.js

我目前正在使用 Babel。

我之前使用 require 做了以下操作:

try {  
    var myModule = require('my-module');
} catch (err) {
    // send error to log file
}

但是,当尝试使用 import 执行此操作时:

try {  
    import myModule from 'my-module';
} catch (err) {
    // send error to log file
}

我得到错误:

'import' and 'export' may only appear at the top level

现在我了解到 importrequire 不同。来自阅读Are ES6 module imports hoisted? import 提升,这意味着在代码执行之前加载导入。

我之前所做的是,如果任何要求失败,则会创建一个日志,该日志会通过电子邮件提醒我(将日志发送到 logstash 等)。所以我的问题归结为以下几点。

如何在 nodejs 中以一种良好的实践方式处理导入错误?这样的事情存在吗?

最佳答案

您无法捕获 静态导入 错误(参见 Boris 的回答)

不过,您可以为此使用动态 import()

现在是 supported by all evergreen browsers & Node ,并且是标准的一部分since ES2020 .

class ImportError extends Error {}

const loadModule = async (modulePath) => {
  try {
    return await import(modulePath)
  } catch (e) {
    throw new ImportError(`Unable to import module ${modulePath}`)
  }
}

关于node.js - ES6 导入错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38946112/

相关文章:

javascript - 我是否需要像 Java 一样同步 Node.js 代码?

javascript - Promise 内的多个resolve() 调用返回异步函数

javascript - 添加要跨 Node 模块使用的常量

node.js - 如何将变量传递给 puppeteer 的 $eval 中的回调?

javascript - 为什么 Javascript 异常会使解释器处于不可预测的状态?

javascript - 无法为nodejs安装express和socket.io

javascript - 如何在 nodejs 中同步调用请求?

javascript - 基于 Node.js 的流程管理器如何工作?

node.js - 我可以显示 npm 运行的扩展命令吗?

javascript - 在 node.js 服务器上生成 URL