【问题标题】:Importing ES6 modules in CommonJS Node app?在 CommonJS Node 应用程序中导入 ES6 模块?
【发布时间】:2021-04-17 11:02:56
【问题描述】:

长话短说,我正在尝试在 CommonJS 模块中使用仅具有 ES6 模块入口点的 npm 包,即 bids-validator (GitHub),因为我的整个 50 多个模块应用程序都是在 CommonJS 中构建的。根据节点documentation,执行此操作的标准方法是使用import() 函数。我尝试了这种方法,代码如下:

async function importValidator() {
  const { validate } = await import('bids-validator')
  return validate
}

const validate = importValidator()

但是,这会导致bids-validator包出错,不一定是上面的导入函数:

error: unhandledRejection: Cannot use import statement outside a module
/*/app/api/node_modules/bids-validator/index.js:2
import validate from './validators'

有没有办法绕过这个问题,以便我可以在 CommonJS 模块中使用该包?

【问题讨论】:

  • 旁注:const validate = importValidator() 只是将承诺分配给validate
  • 你使用的是什么版本的 Node.js?
  • 关于承诺的好点。我将在异步函数中使用validate,所以无论如何我都可以在那里进行导入。
  • 我使用的是节点 14.16.0。
  • 感谢您的测试,实际上我之前自己也尝试过并且遇到了同样的问题,尽管我不确定是不是只有我一个人。该包提供的 CLI 运行良好,通过 webpack 在浏览器中使用也是如此。让我想知道他们是否在 Node 应用程序中对其进行了测试。

标签: javascript node.js es6-modules commonjs


【解决方案1】:

在 package.json 中检查您选择的选项。确保选择 type:"common.js" 而不是 "module"

【讨论】:

  • type: "commonjs"(不是.),我看不出这与问题描述的问题有何关系。
  • type: "commonjs" 是 Node 中的默认值,所以我没有在我的 package.json 中指定它
猜你喜欢
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 2021-07-25
  • 2021-11-27
  • 2022-11-09
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
相关资源
最近更新 更多