当我将项目设置为CommonJS时,以下导出代码用于工作
let group: keyof typeof cloudFunctions;
// loop through all groups built above and export them
for (group in cloudFunctions) {
if (group != null) {
exports[group] = cloudFunctions[group];
}
}现在,我试图将它转换为ESM模块,所以我使用了ESM export,而不是CJS exports,但是它一直抛给我错误。
let group: keyof typeof cloudFunctions;
// loop through all groups built above and export them
for (group in cloudFunctions) {
if (group != null) {
export[group] = cloudFunctions[group];
}
}唯一能解决这个问题的方法是在顶层的for循环之外,一个一个地静态地声明这个问题。
问:如何采用ESM中的CJS中类似的结构,以便以编程方式导出存储在变量中的函数?
发布于 2022-06-23 12:36:55
您不能使用ESM进行动态导出。无害环境管理要求出口必须是静态分析的。
相反,您可以导出动态定义的对象:
export const someName = {...cloudFunctions};...or可能只是直接导出cloudFunctions,因为它似乎已经具备了您想要导出的内容:
export cloudFunctions;从模块导入的代码将无法从导出的对象直接导入属性;相反,它必须导入对象,然后使用所需的属性。例如,如果我假设您做了direclty导出cloudFunctions
...then导入(比方说) whatever函数,然后假设您使用someName作为导出的名称:
import { someName } from "./the-module";
const { whatever } = someName;
// ...code using `whatever`...发布于 2022-06-26 16:21:26
只是面临着同样的问题。经过一些研究,我意识到ESM并不直接支持动态导出。
export initFunctionReturnsObject();有两个选项可以提供动态接口,两者都需要一些额外的代码才能正确导入。假设init.js具有由函数initFunctionReturnsObject生成的动态导出对象{ a,b}。那我们就可以
export default initFunctionReturnsObject() // generate { a, b }从‘./init.js’导入init;const { a,b}= init;
另一种方法是使用动态导入。
const {默认值:{ a,b}}=等待import('./init.js');
export const obj = initFunctionReturnsObject()从‘./init.js’导入{ obj };const { a,b}= obj;
我希望这将有助于解决ESM中动态导入的工作方式。
https://stackoverflow.com/questions/72730194
复制相似问题