3

我正在尝试 webpack(在 Railswebpacker库的上下文中),并希望将生成的包用于服务器渲染 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 以使错误消失,但我想知道,有没有合适的方法来做到这一点?例如:

  • 我可以在没有HMR 代码的情况下从 webpack-dev-server 获取捆绑包吗?
  • 我可以以某种方式绕过 HMR 代码(除了添加大量模拟之外)吗?
4

1 回答 1

0

这是一个非答案,但我找到了解决方法。

客户端设置是在require通话期间完成的,所以我使用正则表达式来注释掉require

client_require = /__webpack_require__\(.*webpack-dev-server\/client\/index\.js.*\n/
# find the client require and comment it out: 
dev_server_asset.sub!(client_require, '//\0')

现在,设置代码存在,但它永远不会运行!这很难理解而且很脆弱,但它确实有效

于 2017-04-07T21:20:17.817 回答