从动态 js.file 名称导入函数
Import function from a dynamic js.file name
我正在尝试从一个名称从控制台传递的文件中导入。这适用于从 JSON 的第一次导入,但是当我尝试导入 js 文件时,我无法使用函数:
let vis = process.argv[2];
import(`./${vis}.json`).then((vis2) => {
import(`./${vis}.js`).then((mani)=>{
console.log(mani);
await mani().then()...
})
})
vis2 导入正确。
mani return 一个正确的函数(该文件中只有一个函数):
mani: [AsyncFunction: mani]
但是当我尝试调用下一行代码中的函数时,出现错误消息:
TypeError: mani is not a function
我做错了什么?如何从js文件中获取函数?由于 js 文件名是动态的(通过控制台传递),我不能使用常规的 import {} from '';结构。
由于 ESM 模块系统的静态特性,您不能指定使用标准 import
语法动态构造的模块名称 - 依赖图实际上是在实际代码执行之前构建的,此时点模块名称应该是已知的。
但是您可以使用动态 import()
语法来做到这一点 - 它包含一个函数,该函数 returns 一个解析为 module
对象的承诺。
import(dynamicName)
.then(function(module){
// Use module here.
})
我不确定您是否能够直接导入 .json
文件 - 除非您的构建系统或执行环境设置为处理某些适当类型的代码转换。这是因为 .json
文件不符合 ESM 模块的条件。
我正在尝试从一个名称从控制台传递的文件中导入。这适用于从 JSON 的第一次导入,但是当我尝试导入 js 文件时,我无法使用函数:
let vis = process.argv[2];
import(`./${vis}.json`).then((vis2) => {
import(`./${vis}.js`).then((mani)=>{
console.log(mani);
await mani().then()...
})
})
vis2 导入正确。 mani return 一个正确的函数(该文件中只有一个函数):
mani: [AsyncFunction: mani]
但是当我尝试调用下一行代码中的函数时,出现错误消息:
TypeError: mani is not a function
我做错了什么?如何从js文件中获取函数?由于 js 文件名是动态的(通过控制台传递),我不能使用常规的 import {} from '';结构。
由于 ESM 模块系统的静态特性,您不能指定使用标准 import
语法动态构造的模块名称 - 依赖图实际上是在实际代码执行之前构建的,此时点模块名称应该是已知的。
但是您可以使用动态 import()
语法来做到这一点 - 它包含一个函数,该函数 returns 一个解析为 module
对象的承诺。
import(dynamicName)
.then(function(module){
// Use module here.
})
我不确定您是否能够直接导入 .json
文件 - 除非您的构建系统或执行环境设置为处理某些适当类型的代码转换。这是因为 .json
文件不符合 ESM 模块的条件。