Dúvidas e erros frequentes do curso de React Avançado e coisas relacionadas também.
Abaixo segue o índice com todas as coisas, sinta-se a vontade para adicionar novas dúvidas/soluções. E caso não encontre direto no índice, tenta dar um search
primeiro, as vezes não está no título, mas está dentro do documento, um ctrl+F
sempre ajuda =)
Para dúvidas sobre termos/ferramentas usados no curso, temos também o Glossário
- FAQ
- Índice
- Qual plugin você usa para graphql/cor/tema/etc?
- Meu prettier não está formatando o código
- Cannot find module 'prettier' / Cannot find module 'jsdom' (insira qualquer outro aqui)
- Command not found: eslint
- Warnings aparecendo ao rodar algum yarn add / npm install
- Meu NVM sempre para de funcionar quando reinicio o terminal
- Error Cannot create "/usr/local/bin/create-next-app" due to insufficient permissions.
- Meu
test:watch
não está funcionando, ele roda os testes e acaba - Como saber os types do NextJS?
- sudo: service: command not found
- Cannot find module 'core-js/modules/es.array.iterator'
- Can't resolve
@ckeditor/ckeditor5-build-classic
- Something went wrong ao instalar ckdeditor
- Como rodar o dump no Docker? O comando
psql
não existe - Como exportar a base localmente com o Docker
- pg_restore: error: could not read from input file: end of file
- Server wasn't able to start properly.
- Como usar o Docker no Windows?
- Estou usando o WSL mas está muito lento!
- error The client
pg
is not installed - O termo 'NODE_ENV=production' não é reconhecido como nome de cmdlet
- Not implemented: window.computedStyle ao rodar os testes
- Cannot read property 'map' of undefined
- Property 'propriedade_aqui' does not exist on type 'propriedade'
- Não tem mais opção de selecionar template ao rodar create-next-app
- 'Error: You have both a "main" and a "config"' ao rodar o Storybook
- Como fazer o Storybook funcionar com caminho absoluto
- You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.
- Connection test failed: autenticacao do tipo password falhou para usuario "strapi"
- rating must be one of the following values: FREE, pegi3, pegi7, pegi12, pegi16, pegi18 | GoG não tá retornando os ratings
- "Expected a value of type "ENUM_COMPONENTPAGESOCIALLINKS_TITLE" but received: "Dribble"
- Estou usando tanto a API como o Client no mesmo repositório, como subo no Heroku?
- Meu SVG não está pegando no Cloudinary.
- Cannot find module 'utils/tests/helpers' from 'src/components/Main/test.tsx'
- Cannot find module '../build/Release/sharp.node'
- Estou recebendo
no-unused-vars
em coisas do TypeScript - toHaveStyle tá dando erro nos testes
- BABEL ssr is not a valid Plugin property
- O termo 'touch' não é reconhecido como nome de cmdlet, função, arquivo de script
- System limit for number of file watchers reached, watch
- Esqueci meu usuário/senha de Admin do Strapi, como faço?
- As fotos dos autores não aparecem na Landing Page
- Error: Validation error - slug must match the following
- Qual é o link do Figma da Won Games?
Todas as extensões que uso no curso podem ser baixadas aqui ou só buscar por React Avançado Extension Pack
dentro do VS Code e baixar por lá.
- Verifique se você já instalou o pacote do
prettier
, como no boilerplate.
Caso não tenha, instale com yarn add -D prettier
, reinicie o editor e tente novamente.
- Verifique se o teu VS Code está configurado para formatar ao salvar. Você precisa ter um arquivo na raiz do projeto como .vscode/settings.json, segue abaixo o código:
{
"editor.formatOnSave": false,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
}
}
- Se já fez tudo acima e ainda não funciona, verifique se o seu arquivo do .eslintrc.json está configurado corretamente com o plugin do prettier sendo passado.
Sempre que tiver um erro dizendo cannot find module
significa que você não tem o pacote que está tentando importar. Verifique se o nome está escrito certo e caso esteja tudo certo, verifique se está de fato instalado, caso contrário, é só instalar com:
# caso seja uma dependência de desenvolvimento
yarn add -D <nome_modulo>
# caso seja uma dependência do projeto
yarn add <nome_modulo>
Se você tentar rodar o eslint
diretamente pelo terminal e der esse erro, isso indica que você não tem o eslint
instalado globalmente no seu sistema. Você tem duas opções:
- Instalar globalmente com
npm install -g eslint
ouyarn global add eslint
. - Rodar através do projeto com
yarn lint
(verifique se possui o comando nopackage.json
) ou comyarn eslint
.
É normal terem alguns warnings dependendo da dependência e suas sub dependências.
Isso ocorre quando alguma dependência interna é depreciada ou modificada ou tem algum erro de segurança.
Não precisa se preocupar que em 99% dos casos isso não chega a te afetar. Quem precisa verificar e mudar é a biblioteca em questão.
Se você está usando o WSL e está tendo problema com o NVM, basta adicionar a linha:
source ~/.zsh-nvm/zsh-nvm.plugin.zsh
No seu arquivo .zshrc
e então reiniciar seu terminal, prontinho, estará funcionando normalmente.
É possível que você esteja tentando rodar o comando em alguma pasta sem permissão ou até mesmo que tenha instalado globalmente e para o usuário em questão você não está tendo permissão. Recomendo que remova qualquer traço do comando global, com:
# tente remover via npm primeiro
npm uninstall -g create-next-app
# ou então remova direto a pasta
# primeiro verifique onde está o comando com
which create-next-app
# com a pasta retornada, use o comando
rm -rf <pasta> # por padrão, costuma ser /usr/bin/create-next-app
Após removido, utilize o comando através do npx
para não necessitar instalar nada na máquina.
npx create-next-app nome-do-app
Nosso comando no boilerplate está utilizando o yarn
e nele nós podemos passar simplesmente como:
yarn test --watch
Mas no npm
nós precisamos passar dois traços --
para passar o comando abaixo e de fato funcionar, ou seja, o comando precisa ser:
npm run test -- --watch
Todos os types estão definidos no repositório oficial.
Se você tentou usar o comando service
no MacOS é bem possível que você recebeu esse erro, afinal de contas o service
é um comando para inicializar serviços no Linux.
No Mac você pode usar:
brew services start <nome-do-serviço>
brew services stop <nome-do-serviço>
brew services restart <nome-do-serviço>
Se você estiver tendo esse erro é possível que está rodando com o npm
e portanto ele não tem polyfill para certos métodos do es6 e quebra. Normalmente mudar para utilizar o yarn
já resolve o problema.
Outra maneira é instalar o pacote do core-js
com:
npm install -D core-js
Se você tiver ao tentar subir o projeto do Strapi no Heroku, basta adicionar um método de postinstall
no projeto para que ele instale as dependências do plugin, segue o commit de como fazer
Se você teve problemas no Strapi depois de instalar o Ckeditor, muito provavelmente é por causa da versão. Na versão nova 23.x
, eles fizeram algumas mudanças que causaram breaking changes com o nosso código. Eu estou investigando o problema, mas para que você tenha tudo funcionando normalmente, faça os seguintes passos:
- Mudar as versões em
plugins/wysiwyg
para as versões descritas no curso - Rodar o
yarn
dentro da pastaplugins/wysiwyg
para refazer oyarn.lock
com as dependências corretas - Rodar
yarn build --clean
dentro da raiz do projeto para refazer o build - Rodar
yarn start
ouyarn develop
para iniciar o projeto
Caso continue quebrando, tente remover o node_modules
tanto da pasta raiz do projeto quanto de plugins e reinstale novamente.
Existem várias formas de rodar o comando, o mais simples e indicado é:
cat strapi.sql | docker exec -i NOME_DO_SEU_CONTAINER psql -U SEU_USUARIO -d SUA_DATABASE
Esse comando irá exportar a base de dados para a sua máquina com o seguinte formato: DUMP_DIA-MES-ANO_HORA_MINUTO_SEGUNDO
, por exemplo, DUMP_06-10-2020_09_27_44.
docker exec -i NOME_DO_SEU_CONTAINER pg_dump --username SEU_USUARIO --password SUA_DATABASE > DUMP*`date +%d-%m-%Y"_"%H_%M_%S`.sql
Se você tiver esse problema quando estiver tentando importar o dump
lá do S3, é muito possível que você não tenha liberado as permissões para o arquivo. Basta entrar no painel do S3, selecionar o arquivo e então na parte das permissões, deixar como público.
Se você fez o Dump e começou a ter esse erro, é muito possível que terá uma linha logo abaixo com algo similar a:
[2020-07-25T14:16:53.112Z] error error: column "<algum nome aqui>" contains null values
Isso acontece pois a estrutura que você montou está com alguma coisa diferente de como eu construí e é por isso que o dump acaba não preenchendo o dado e aí acaba quebrando.
A dica é você comparar seus arquivos com a api do repositório e também os componentes, muito possivelmente irá achar o arquivo com o campo diferente.
Ao achar a diferença, as soluções são:
- Substituir o seu arquivo pelo arquivo oficial
- Apagar o banco defeituoso
- Rodar o dump novamente
Ou você também pode verificar se o campo possui required: true
na model e então remover, isso vai permitir valores null
no banco e assim o Strapi vai conseguir inicializar e aí basta você preencher esse dado faltante.
A primeira coisa que recomendo é que você utilize o WSL, aqui eu ensino como configurar tudo em 30min.
E já tendo o WSL configurado, basta seguir os passos da documentação. Você irá instalar e rodar o Docker do lado do Windows, mas com a opção de habilitar o docker no WSL.
Verifique se você não está rodando com os arquivos do lado do Windows como: C:\...
. O indicado é ter sempre do lado do WSL, algo como /development/...
Verifique se a versão que está rodando é a WSL2, ela é bem rápida que sua versão anterior. Para verificar, abra o Windows Powershell e rode o comando:
wsl --list --verbose
# deve retornar algo como
NAME STATE VERSION
* Ubuntu-20.04 Running 2
docker-desktop Running 2
docker-desktop-data Running 2
Isso pode acontecer na hora de subir no Heroku se você não tiver a dependência instalada no projeto, para corrigir é só instalar com:
yarn add pg
Esse erro acontece no Windows, pois ele não identifica corretamente as variáveis de ambiente.
A primeira coisa que recomendo é que você utilize o WSL, aqui eu ensino como configurar tudo em 30min.
Mas caso queira continuar usando o Windows, você precisa instalar um pacote chamado cross-env
com o comando:
yarn add -D cross-env
E depois modificar o seu comando para ficar:
cross-env NODE_ENV=production yarn build
Esse erro acontece quando você tenta rodar métodos do jest-dom
e não o tem configurado. Para configurar, você precisa ter um arquivo .jest/setup.ts e então chamar o setup na configuração do jest.config.js.
Esse é um erro muito comum no JavaScript e muitas pessoas tem dificuldade, então vamos tentar entender o que está acontecendo.
O erro diz que não consegue usar map
em undefined
, isso significa que o array que você está tentando percorrer não existe. Pensemos no seguinte código:
const arr = [1, 2, 3];
// aqui vai funcionar normal, afinal de contas o `arr` existe e é de fato um array
arr.map(n => console.log(n))
// aqui ele vai dizer exatamente "Cannot read property 'map' of undefined"
arrayQueNaoExiste.map(n => console.log(n))
Nesses casos, você precisa verificar:
- O array realmente foi criado?
- O nome que está chamando está correto?
- Você está passando essa variável para dentro do componente?
Faça essas verificações, tente ler o código e ir entendendo o processo.
Esse é um erro super comum do TypeScript, verifique na criação do seu Type Alias se a propriedade foi de fato criada, normalmente você esqueceu de criar. Segue exemplo:
type AuthorProps = {
name: string
description: string
}
// Property 'age' does not exist on type 'AuthorProps'.
const renderAuthor = ({ name, description, age }: AuthorProps) => (...)
De fato nas novas versões não existe mais a opção, mas você pode buscar o exemplo na lista oficial:
https://github.com/vercel/next.js/tree/canary/examples
E então pode rodar o comando:
npx create-next-app myapp -e <nome-do-exemplo>
Ou se você quiser usar um boilerplate específico, basta rodar:
npx create-next-app myapp -e <url-do-boilerplate>
Depois da atualização do Storybook 6, a configuração ficou mais simplificada, agora podemos ter somente a main.js
e o preview.js
caso queira adicionar algum wrapper.
Você pode seguir o padrão do boilerplate oficial
Para importar o componente direto como components/Logo
ao invés de ../src/components/Logo
basta editar o seu arquivo main.js
de configuração do Storybook para incluir as seguintes linhas:
webpackFinal: (config) => {
config.resolve.modules.push(`${process.cwd()}/src`)
return config
}
Você pode ver o arquivo completo aqui
You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.
Basta verificar se a versão do Eslint e do TypeScript estão na mesma major version, ou seja, tudo 4.x
ou 3.x
. Recomendo usar a 4.x
visto que é a versão atual.
Verifique se o serviço do banco está de fato em pé e também verifique se as configurações (host, porta, username e password) estão corretos.
rating must be one of the following values: FREE, pegi3, pegi7, pegi12, pegi16, pegi18 | GoG não tá retornando os ratings
Aparentemente a GoG mudou essa parte do rating para verificar de acordo com o país. Para o Brasil eles estão usando:
https://items.gog.com/brazilian_ratings/L.png https://items.gog.com/brazilian_ratings/10.png https://items.gog.com/brazilian_ratings/12.png https://items.gog.com/brazilian_ratings/14.png https://items.gog.com/brazilian_ratings/16.png https://items.gog.com/brazilian_ratings/18.png
O ideal é mudar o enum
do rating
para ficar de acordo com os novos dados. Segue o commit da mudança.
Verifique o seu arquivo de social-links, os nomes precisam ser exatamente iguais ao do Enum.
Exemplo, se o erro for no Dribble
, é porque ele precisa de 3 b
, o certo é Dribbble
. O mesmo deve ser tratado para Github
sem H
maiusculo e por aí vai.
Para subir somente o backend para o Heroku, basta rodar o comando:
git subtree push --prefix <pasta-backend> heroku master
# exemplo, se a pasta for /api
git subtree push --prefix api heroku master
A Cloudinary aparentemente tem alguns problemas em interpretar o SVG se ele estiver sem o cabeçalho completo, basta adicionar a seguinte linha no início do arquivo SVG:
<?xml version="1.0" encoding="utf-8"?>
Muito possivelmente o Jest não está reconhecendo o absolute path, basta editar seu jest.config.js
para ter essa linha:
modulePaths: ['<rootDir>/src/']
Verifique sempre o arquivo original no boilerplate
Verifique sua versão do Node, se estiver na 14
, é muito possível que esse seja o erro. Tente usar a versão LTS 12.x
, delete o node_modules
e tente instalar novamente.
Isso é muito possivelmente um conflito das versões do @typescript-eslint/eslint-plugin
, @typescript-eslint/parser
e o typescript
.
Verifique as versões e mantenha sempre na versão major delas, ou seja, 4.x
.
Caso continue dando erro, remova o node_modules
, reinstale tudo e reinicie o servidor de TypeScript do VS Code.
Para reiniciar o servidor, basta pressionar ctrl+shift+P
(cmd no Mac) e buscar por restart TypeScript server
.
Esse é um bug já reportado que veio em algumas otimização da versão 5.2.x
. Para corrigir esse problema, a solução atual
está sendo mapear no Jest o uso do bundle de browser que o Styled Components cria. Para isso, edite seu arquivo jest.config.js
para incluir as seguintes linhas:
moduleNameMapper: {
'^styled-components':
'<rootDir>/node_modules/styled-components/dist/styled-components.browser.cjs.js'
}
Você pode ver o arquivo completo aqui
Update: o pessoal do styled-components
corrigiu esse bug na versão 5.2.1
, então basta atualizar a versão. Você pode ver as correções feitas no nosso boilerplate nesse commit
Provavelmente você não está encapsulando o plugin em um [ ]
extra. Verifique se a configuração do .babelrc
está batendo com o boilerplate.
O comando touch
é exclusivo do UNIX e não funciona no Windows puro. Eu recomendo fortemente que você utilize o WSL, aqui eu ensino como configurar tudo em 30min.
O file watchers são parte do sistema operacional, que vão assistir as mudanças de arquivos e atualizar. Em alguns sistemas, o número de watchers é baixo, basta que você atualize o arquivo de configuração.
No Ubuntu/WSL:
https://dev.to/rubiin/ubuntu-increase-inotify-watcher-file-watch-limit-kf4
Verifique a versão, se a versão for 3.2.4
ou acima, você pode utilizar o comando da cli para resetar a senha, com:
strapi admin:reset-user-password --email=chef@strapi.io --password=Gourmet1234
Caso seja uma versão abaixo, siga os seguintes passos abaixo:
Se você lembrar o email cadastrado, recomendo utilizar a opção "Esqueceu sua senha" e você irá receber na sua caixa de Spam
uma mensagem para refazer a senha (funciona mesmo localmente!)
Se você não lembrar o email, você pode deletar a tabela strapi_administrators
e a próxima vez que tenta acessar o sistema, ele vai pedir para criar o usuário.
Para deletar, basta rodar truncate strapi_administrators;
dentro do Postgres no seu banco.
Verifique se na sua API do Strapi, a photo
está com a opção de Single Media
definida. Precisa estar conforme esta linha.
Se você estiver populando o nosso banco de dados do Strapi e tiver esse erro, é possível que o slug de algum jogo esteja fora dos padrões que o Strapi definiu. Para normalizar tudo, basta editar para que o método de slugify
remova qualquer símbolo estranho:
slug: slugify(name, { strict: true, lower: true }),
Você pode ver o arquivo inteiro e sua linha modificada, bem aqui
Você pode acessar o link do Figma aqui.
Lá você encontrará:
- Protótipos para Mobile e Desktop
- Styleguide do projeto
- Inspirações usadas para construção
- Branding da Won Games
- Wireframes
- Imagens
- Icones
- Landing Page de venda do curso