全局范围内的webpack执行模块

时间:2016-04-08 19:14:20

标签: javascript webpack

有没有办法在全局范围内拥有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只获取一个导出值并将其附加到全局范围。在这种情况下,我需要确保在全局范围内可以使用未导出的值。

最明显的解决方案是在全局范围内执行此模块。但是,我希望这个模块成为捆绑包的一部分。我怎么能做到这一点?

提前致谢。

1 个答案:

答案 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;
    }
}
基本上,我是手动公开构造函数。