javascript 有没有办法在(浏览器)ES6模块中导入非模块变量?

fdx2calv  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(93)

这是浏览器JavaScript。假设我有一个外部JavaScript库:

// feature.js
var Feature = { /* ... */ }

通常,您在HTML中引用该文件,并在全局范围内获得Feature变量。有没有办法从ES6模块导入它,这样它就不会污染它之外的全局作用域?这样的事情(不工作):

// index.js
import "/feature.js"

// Use feature
Feature.foo(); // Feature is not available here

同样在我的特定案例中,我注意到这个库在结尾处有一个UMD语句:

"undefined"!=typeof exports&&(exports.Gmail=Gmail)

所以我可以有一个类似这样的变通方法,但现在全局范围有一个exports变量。这是一个很好的解决办法吗?有没有更好的方法将其保存在我的模块中?

(globalThis as any).exports ??= {};

        // @ts-ignore
        await import("/libs/jquery.min.js");
        // @ts-ignore
        await import("/libs/gmail.min.js");

        const Gmail = (globalThis as any).exports.Gmail;
bqjvbblv

bqjvbblv1#

不需要。你需要在这个库中添加一个export声明,没有其他方法可以绕过它。

相关问题