babel-node error 'Reference error: window is not defined'

babel-node error 'Reference error: window is not defined'



我的任务是为 React 应用程序实现服务器端渲染。我已经按照本教程进行操作:https://scotch.io/tutorials/react-on-the-server-for-beginners-build-a-universal-react-and-node-app 之后,按照实际应用程序的确切步骤进行操作。实现客户端渲染一切正常,但是当我继续服务器端渲染时,我收到以下错误:'Reference error: window is not defined'
问题是应用程序使用了 scrollmagic,这是一个仅限客户端的库(注意:我在代码本身的任何 scrollmagic 引用中添加了条件 'require',但我找不到绕过该模块的方法).
我考虑过在客户端添加 scrollmagic 库,但是一旦删除它,我就会从 'require' 语句中收到错误消息。
如果这是显而易见的事情,我深表歉意,但我是 JavaScript 的新手,并且已经搜索了几天,但到目前为止一无所获。如果我可以提供任何其他信息,请告诉我!另外,如果您对我应该如何处理这件事有任何建议,我会洗耳恭听!

最好的问候,
安德鲁

window 对象是 browser/client 的 属性,因此在服务器上执行 javascript 时您将无法访问它。诸如 https://www.npmjs.com/package/window-or-global 之类的库可以提供帮助,还可以添加条件逻辑以在执行依赖它的代码之前检查 window 对象。

除了@sconway 的建议在调用这些客户端方法时手动检查 window 的存在之外,我过去使用的另一种方法是将该代码放在 componentDidUpdate 生命周期法。

此方法保证不会在服务端调用,只能在客户端调用。