原因
おそらく SSR / SSG する時に言えることだと思いますが、Server Side Rendering 中は window オブジェクトが定義されていないため、レンダリング対象で window オブジェクトを使っているとエラーになります。
"window" is not available during server side rendering.
See our docs page for more info on this error: https://gatsby.dev/debug-html
WebpackError: ReferenceError: window is not defined
対処法
コンポーネント上で window オブジェクトが存在するかどうかを typeof window でチェックしてから使います。
const TestComponent = (props) => {
...
if ( typeof window !== 'undefined' ) {
... window オブジェクトを使う ...
}
...
}
window オブジェクトを使っているところで、三項演算子などで対応しても良いかもしれません。
公式の解説ページ(https://www.gatsbyjs.com/docs/debugging-html-builds/)によると、「componentDidMount
ライフサイクル か、useEffect
フックに入れろ」とも書いてあります。
多少面倒ですが、ブラウザのグローバルオブジェクトがサーバーでは無いため仕方ないんですかね。