Webpack 如何配置网页包以支持;“全球窗口”;对于Breeze客户端+;DataJS

Webpack 如何配置网页包以支持;“全球窗口”;对于Breeze客户端+;DataJS,webpack,breeze,datajs,Webpack,Breeze,Datajs,我正在尝试将一个项目从SystemJS转换为使用breeze客户端和datajs(用于OData支持)的WebPack。总之,这是一个angular2应用程序,因此breeze-bridge-angular2也是该项目的一部分 虽然SystemJS版本运行正常,但网页包版本会引发错误: 无法初始化OData。需要支持远程OData 显然,问题在于breeze客户端无法在global.window.OData中找到OData库。一些快速调试表明,根本原因似乎是“global.window”通常未定

我正在尝试将一个项目从SystemJS转换为使用breeze客户端和datajs(用于OData支持)的WebPack。总之,这是一个angular2应用程序,因此breeze-bridge-angular2也是该项目的一部分

虽然SystemJS版本运行正常,但网页包版本会引发错误:

无法初始化OData。需要支持远程OData

显然,问题在于breeze客户端无法在global.window.OData中找到OData库。一些快速调试表明,根本原因似乎是“global.window”通常未定义(在函数uu requireibcore中)。请注意,datajs似乎正确地包含在Web包中,因此问题不是缺少datajs,而是breeze客户端通常无法访问“窗口”

我对整个主题都很陌生,所以我正在努力找出正确的解决方案。我相信需要在webpack中配置一些东西来实现这一点,但我不确定这可能是什么-我为这里的含糊不清表示歉意-可能是webpack.config.js中的一些导入加载程序或ProvidePlugin引用


任何帮助都将不胜感激。

我遇到了同样的问题,并使用webpacks importsloader解决了此问题。它允许您将变量注入模块。更多信息

以下是我的网页配置中的代码片段:

        { test: require.resolve('breeze-client/breeze.debug'), loader: 'imports-loader?this=>window,global=>{window: this}'},

尝试使用ProvidePlugin。它使变量在全局级别可用,正如所述,这就是我所猜测的。然而,我不知道到底要在ProvidePlugin中加入什么才能使这个具体案例起作用。为了使事情更加复杂,breeze客户端不静态访问“window.OData”,而是使用libName=“OData”访问window[libName]。