【发布时间】:2017-08-31 09:04:42
【问题描述】:
我正在尝试 webpack(在 Rails 的 webpacker 库的上下文中)并希望将生成的包用于服务器渲染 React 组件。
我可以很好地从本地开发服务器获取文件,但是当我将它们加载到我的服务器端 JavaScript 上下文时问题就来了。 (我使用的是 Ruby 的 ExecJS,由 therubyracer 提供支持,这是一个与 V8 的 Ruby 绑定。)
由于捆绑包来自 webpack-dev-server,它包含一堆用于设置热模块重新加载的代码。此代码假定它是从 script 标记加载的,因此它会对页面的 URL 进行一些检查。在纯 V8 上下文中,没有 URL,因此我们会收到很多错误,例如:
TypeError: Cannot read property 'protocol' of undefined
因为它试图读取self.location.protocol。 (self 存在,但self.location 不存在。)
我开始模拟各种 DOM API 以消除错误,但我想知道,有没有 正确的 方法来做到这一点?例如:
- 我可以从 webpack-dev-server 获取一个捆绑包没有 HMR 代码吗?
- 我能否以某种方式绕过 HMR 代码(添加大量模拟除外)?
【问题讨论】:
标签: ruby-on-rails webpack-dev-server server-side-rendering webpacker