如何配置Webpack以支持Breeze-Client+DataJS中的“global.window”

3

我正在尝试将一个使用breeze-client和datajs(用于OData支持)的SystemJS项目转换为Webpack。总体而言,这是一个angular2应用程序,因此breeze-bridge-angular2也是该项目的一部分。

虽然SystemJS版本运行正常,但WebPack版本会抛出错误:

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

显然,问题在于breeze-client无法在global.window.OData中找到OData库。快速调试显示,根本原因似乎是“global.window”通常未定义(在函数__requireLibCore中)。请注意,datajs似乎已正确包含在webpack中,因此问题不是缺少datajs,而是breeze-client不能访问“window”。

Debug Details

我对整个主题还不太熟悉,所以我很难确定正确的解决方案。我相信某些东西需要在webpack中进行配置才能使其工作,但我不确定这个“某些东西”可能是什么——对于我的模糊之处深感抱歉——也许是webpack.config.js中的一些imports-loader或ProvidePlugin参考。

非常感谢任何帮助。


尝试使用ProvidePlugin。它可以将变量提供为全局级别可用。 - nikhil mehta
正如所述,这是我的猜测。然而,我不知道在ProvidePlugin中究竟要放什么才能使这个特定的情况工作。更复杂的是,breeze-client并没有静态地访问"window.OData",而是使用libName="OData"的window[libName]。 - user1211286
1个回答

1
我遇到了同样的问题,使用webpack的importsloader解决了这个问题。它允许你将一个变量注入到模块中。更多信息在这里
以下是我的webpack配置代码片段:
        { test: require.resolve('breeze-client/breeze.debug'), loader: 'imports-loader?this=>window,global=>{window: this}'},

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接