【问题标题】:Exporting a dynamic import导出动态导入
【发布时间】:2019-10-31 07:39:50
【问题描述】:

我想根据表达式从自定义模块中导出不同的包

const settings = {}

const init = (sentry) => {
  sentry.init(settings)
  return sentry
}

const pkg = async () => {
  let mod

  if (__CLIENT__) {
    mod =  await import('@sentry/browser').then(init)
  } else {
    mod = await import('@sentry/node').then(init)
  }
  return mod
}

const Sentry = pkg()

console.log({ Sentry })

export default Sentry

但是,当我稍后导入此文件时,我会收到一个未决的承诺

import Sentry from 'config/sentry'
console.log(Sentry) // -> promise pending 

是否可以在顶层默认导出动态导入的模块?

更新

我最终选择了 require 而不是动态导入,正如我系统上的 webpack 全局设置所支持的那样

const Sentry = __CLIENT__ ? require('@sentry/browser') : require('@sentry/node')

【问题讨论】:

标签: javascript


【解决方案1】:

异步函数总是返回一个承诺。这是根据定义。由于动态导入也返回承诺(并且是异步的),因此您无法导出它们,因为导出必须位于脚本的顶层。您能做的最好的事情就是导出 promise 并在导入它的任何脚本中包含一个 .then 处理程序;因为你从你的异步函数返回mod,它将被传递给.then处理程序的参数供你使用。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2019-06-16
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多