Recentemente, adicionei const isIE = /*@cc_on!@*/ false || !!document.documentMode
como uma verificação para ver se um usuário está usando o Internet Explorer e, condicionalmente, adicionei uma mensagem solicitando que ele use um navegador moderno (Chrome / Firefox). Embora isso funcione conforme o esperado usando gatsby develop
, ele falha usando gatsby build
afirmando:
error Building static HTML failed
WebpackError: ReferenceError: document is not defined
Executando gatsby build
dentro da pasta do projeto após declarar const isIE = /*@cc_on!@*/ false || !!document.documentMode
e executar uma verificação em const {isIE && ()}
em um dos arquivos js. Gatsby develop
funciona bem como esperado.
O site cria sem erros e exibe condicionalmente a mensagem se o usuário estiver usando o Internet Explorer
Site incapaz de construir com gatsby build
mas bom com gatsby develop
.
WebpackError: ReferenceError: document is not defined
- header.js:20 Module../src/components/header.js
lib/src/components/header.js:20:27
- bootstrap:19 __webpack_require__
lib/webpack/bootstrap:19:1
- bootstrap:19 __webpack_require__
lib/webpack/bootstrap:19:1
- bootstrap:19 __webpack_require__
lib/webpack/bootstrap:19:1
- sync-requires.js:8 Object../.cache/sync-requires.js
lib/.cache/sync-requires.js:8:58
- bootstrap:19 __webpack_require__
lib/webpack/bootstrap:19:1
- static-entry.js:9 Module../.cache/static-entry.js
lib/.cache/static-entry.js:9:22
- bootstrap:19 __webpack_require__
lib/webpack/bootstrap:19:1
- bootstrap:83
lib/webpack/bootstrap:83:1
- universalModuleDefinition:3 webpackUniversalModuleDefinition
lib/webpack/universalModuleDefinition:3:1
- universalModuleDefinition:10 Object.<anonymous>
lib/webpack/universalModuleDefinition:10:2
- static-entry.js:84 Module._compile
lib/.cache/static-entry.js:84:3
- static-entry.js:101 Object.Module._extensions..js
lib/.cache/static-entry.js:101:9
System:
OS: macOS 10.14.5
CPU: (8) x64 Intel(R) Core(TM) i5-8259U CPU @ 2.30GHz
Shell: 3.2.57 - /bin/bash
Binaries:
Node: 10.15.3 - /usr/local/bin/node
Yarn: 1.15.2 - /usr/local/bin/yarn
npm: 6.9.0 - /usr/local/bin/npm
Languages:
Python: 2.7.10 - /usr/bin/python
Browsers:
Chrome: 75.0.3770.90
Safari: 12.1.1
npmPackages:
gatsby: ^2.9.0 => 2.9.0
gatsby-image: ^2.1.3 => 2.1.3
gatsby-plugin-google-analytics: ^2.0.21 => 2.0.21
gatsby-plugin-hotjar: ^1.0.1 => 1.0.1
gatsby-plugin-manifest: ^2.1.1 => 2.1.1
gatsby-plugin-offline: ^2.1.1 => 2.1.1
gatsby-plugin-react-helmet: ^3.0.12 => 3.0.12
gatsby-plugin-sass: ^2.0.11 => 2.0.11
gatsby-plugin-sharp: ^2.1.3 => 2.1.3
gatsby-plugin-sitemap: ^2.1.0 => 2.1.0
gatsby-remark-external-links: 0.0.4 => 0.0.4
gatsby-source-contentful: ^2.0.69 => 2.0.69
gatsby-source-filesystem: ^2.0.39 => 2.0.39
gatsby-transformer-remark: ^2.3.12 => 2.3.12
gatsby-transformer-sharp: ^2.1.21 => 2.1.21
npmGlobalPackages:
gatsby-cli: 2.6.7
@ j-651 você vai querer fazer essa verificação "no navegador". Como um proxy para isso, você pode usar eventos de ciclo de vida ( componentDidMount
) ou ganchos ( useEffect
).
O código pode ser parecido com este:
import React, { useState, useEffect } from 'react'
function Something() {
const [isIE, setIsIE] = useState(false)
useEffect(() => {
setIsIE(/*@cc_on!@*/ false || !!document.documentMode)
}, [])
return (
<p>{isIE ? 'Internet Explorer' : 'Not IE'}</p>
)
}
export default Something
Vou fechar isso como respondido - obrigado pela pergunta!
Comentários muito úteis
@ j-651 você vai querer fazer essa verificação "no navegador". Como um proxy para isso, você pode usar eventos de ciclo de vida (
componentDidMount
) ou ganchos (useEffect
).O código pode ser parecido com este:
Vou fechar isso como respondido - obrigado pela pergunta!