在同一个 NodeJS 项目中使用 Import 和 Require

问题描述 投票:0回答:1

我有一个 Node.js 项目,其模块是使用

require
以 Common.JS 方式导入的。但是,需要导入仅 ESM 的包。

在我的项目中使用 ESM

import from
的一种方法是将
"type": "module"
添加到我的
package.json
文件中。然而,所有的
requires
都停止工作了。

我验证了一种解决方案是从

module
包创建 require 模块:

import { createRequire } from "module";
const require = createRequire(import.meta.url);

但是,整个(大型)项目都导入了

require
,在我看来,必须向其中每个项目添加此解决方案是不可行的。

所以我想知道是否有一种优雅的方式来声明

require
一次并在整个项目中使用它。

或者,有没有比创建

require
或用所有内容替换 ESM 更优雅的解决方案?

javascript node.js requirejs es6-modules commonjs
1个回答
0
投票

要同时使用

require
import
,您需要使用动态
import()
表达式将 ES 模块加载到 CommonJS 上下文中。

提供解决方案的常见 Node.js 错误消息如下所示:

Error [ERR_REQUIRE_ESM]: require() of ES Module <path> from <path> not supported.
Instead change the require of <path> in <path> to a dynamic import() which is available in all CommonJS modules.

这是使用

lodash
lodash-es
的示例:

const lodash = require('lodash')

async function main() {
  const output = lodash.concat(['hello'], ['world'])
  const lodashEs = await import('lodash-es')

  console.log(lodashEs.join(output, ' '))
}

main()
© www.soinside.com 2019 - 2024. All rights reserved.