在TypeScript中动态加载CJS包中的ESM模块

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

我正在尝试在我的 TypeScript CJS 项目中加载单个 ESM 模块。我找到的所有示例都是针对 JavaScript 的。

// example.ts
export const example = async () => {
  const module = await import("esm-module");
  return module.func
}

我的问题是 TSC 将 import 函数转换为 require,这破坏了一切。

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.example = void 0;
const example = async () => {
    const module = await Promise.resolve().then(() => require("esm-module")); // Not desired
    return module.func;
};
exports.example = example
typescript import es6-modules commonjs dynamic-import
1个回答
0
投票

我偶然发现了这个评论 - 不确定是否有更好的方法。至少

eval
使用时会持续刺痛,所以我没有看到任何掉毛问题。

// example.ts
type EsmModule = typeof import("esm-module");

export const example = async () => {
  const module = await (eval('import("esm-module")') as Promise<EsmModule>);
  return module.func
}

所有其他在线解决方案都错误的基本前提,并错误地尝试混淆

tsconfig.json
package.json

© www.soinside.com 2019 - 2024. All rights reserved.