有没有办法在全局范围内拥有webpack执行模块?具体来说,我的用例是以下库:
https://github.com/AzureAD/azure-activedirectory-library-for-js/blob/master/lib/adal.js
其中有以下代码:
var AuthenticationContext;
if (typeof module !== 'undefined' && module.exports) {
module.exports.inject = function (conf) {
return new AuthenticationContext(conf);
};
}
正如您所看到的,该模块正在导出注入功能(不确定为什么他们不会导出该类)。我可以使用注入函数成功构建一个新的AuthenticationContext对象。但是,此库中的某些功能依赖于全局AuthenticationContext类,并且当window.AuthenticationContext === undefined时它会出错。我想将此模块与webpack捆绑在一起,但不知何故,我需要确保AuthenticationContext在全局范围内可用。有没有办法做到这一点?
我已经阅读了有关ProvidePlugin但是,据我所知,ProvidePlugin只获取一个导出值并将其附加到全局范围。在这种情况下,我需要确保在全局范围内可以使用未导出的值。
最明显的解决方案是在全局范围内执行此模块。但是,我希望这个模块成为捆绑包的一部分。我怎么能做到这一点?
提前致谢。
答案 0 :(得分:1)
我想我用以下代码解决了这个问题:
import {inject} from 'adal-angular/lib/adal.js';
import config from './auth-config';
export default class Authenticator {
constructor() {
this.authContext = inject(config);
window.AuthenticationContext = this.authContext.constructor;
}
}
基本上,我是手动公开构造函数。