【问题标题】:How can i dynamically import a node module (and its dependencies) given the module name?如何在给定模块名称的情况下动态导入节点模块(及其依赖项)?
【发布时间】:2022-12-07 18:12:52
【问题描述】:
我想在 NodeJS 中构建一个函数,它接受一个模块名称作为输入参数,并导入该模块及其依赖项。理想情况下,可能是这样的:
async function loadModule (moduleName) {
await import(moduleName)
}
const test = await loadModule('./test.js')
test.js 会是这样的
import a from 'a'
import b from 'b'
// do something
是否可以在运行时动态导入文件及其依赖项a和b?
【问题讨论】:
标签:
node.js
dynamic
import
【解决方案1】:
在 Node.js 中使用 import 关键字无法在运行时动态导入模块及其依赖项,因为 import 关键字是 ECMAScript (JavaScript) 语言规范的一部分,在 Node.js 中不受支持.
但是,您可以使用 require 函数实现类似的功能,它是 Node.js 核心 API 的一部分。 require 函数允许您在运行时导入模块,但它不支持导入模块的依赖项。
async function loadModule(moduleName) {
return await require(moduleName);
}
const test = await loadModule('./test.js');
和test.js看起来像这样
// test.js
const a = require('a');
const b = require('b');
require函数是同步的,所以不需要使用await。