这是我在浏览器和终端之间共享通用代码库的最后一个障碍。问题是environment/index.ts
收到了从index.ts (entry point)
导出的类实例,并包装在Promise中。由于无法将export
嵌套在import().then()
中,并且不能在顶层使用await
,因此我不确定此问题是否可以解决。 This medium article似乎最接近解决我的问题,但是为ES2017 consumer and exporter
提出的解决方案仍然作为Promise导入。
environment / browser.ts
class Browser { /* ... */ };
export default Browser;
环境/terminal.ts
class Terminal { /* ... */ };
export default Terminal;
环境/index.ts
export default (async function(resolve) {
return new (await import(environment)).default();
})();
index.ts(入口点)
import term from "./environment";
// Expecting: `[Function: Terminal]`
console.log(term); // But got: `Promise { <pending> }`
关于如何避免将term
导入承诺的任何想法?
这是我的工作方式,但是我必须使用require:
import { Browser } from "./browser";
// This is pretty terrible, but I can't find a better way to do it.
let Environment = typeof(process) !== "undefined" ? require("./terminal").Terminal : Browser;
let terminal = new Environment();
export { terminal };
我将悬而未决,希望有更好的方法。