TLDR: Desinstale o pacote global usando npm uninstall -g create-react-app
e gere novos aplicativos de reação usando npx create-react-app app
.
Questão
Você está usando uma versão mais antiga da create-react-app
que você instalou globalmente usando o npm. O create-react-app
comando chama este pacote global.
Você poderia ter confirmado que estava usando uma versão desatualizada executando npm outdated -g create-react-app
ou comparando create-react-app --version
com npm view create-react-app
.
O fato de a versão do react-scripts
estar atualizada não tem nada a ver com a versão do pacote que está inicializando o aplicativo ( create-react-app
), que captura as versões mais recentes dos pacotes que ele usa ( react-scripts
neste caso).
Solução
Se você quiser continuar usando o create-react-app
comando, precisará atualizar o pacote global usando npm update -g create-react-app
. Observe que você deseja fazer isso periodicamente para mantê-lo atualizado. Você notará que create-react-app
isso não é recomendado (observado nos logs da sua instalação).
Uma abordagem melhor seria excluir completamente a instalação global ( npm uninstall -g create-react-app
) e, em vez disso, usá-la npx
para que ela sempre pegue a versão mais recente do pacote (mais detalhes npx
abaixo).
Você deve confirmar que foi desinstalado globalmente, tentando usar create-react-app
para garantir que o comando "não foi encontrado".
Problemas com a desinstalação?
Você pode depurar onde foi instalado usando which create-react-app
. Se estiver com problemas para desinstalá-lo, você pode ter várias versões do nó / npm na sua máquina (de várias instalações ou porque usa um gerenciador de versão do nó, como nvm
). Esta é uma questão separada que não abordarei aqui, mas há algumas informações nesta resposta .
Uma abordagem nuclear rápida seria removê-lo à força ( rm -rf
) no caminho que which create-react-app
retorna.
Suplemento
Pacotes npm globais e o npx
comando
$ NPM_PACKAGE_NAME
sempre usará a versão do pacote instalada globalmente, independentemente do diretório em que você estiver.
$ npx NPM_PACKAGE_NAME
usará a primeira versão do pacote que encontrar ao pesquisar do diretório atual para a raiz:
- Se você tiver o pacote em seu diretório atual, ele será usado.
- Caso contrário, se você tiver o pacote em um diretório pai do seu diretório atual, ele usará o primeiro encontrado.
- Caso contrário, se você tiver o pacote instalado globalmente, ele o usará.
- Else , se você não tiver o pacote em tudo, ele irá instalar temporariamente-lo, usá-lo, e então descartá-lo. - esta é a melhor maneira de garantir que o pacote esteja atualizado .
Mais informações sobre npx podem ser encontradas nesta resposta .
Usando npx
comcreate-react-app
create-react-app
possui alguns comandos / aliases especiais para criar um aplicativo de reação (em vez de npx
) que são específicos para esse pacote ( yarn create react-app
, npm init react-app
), mas npx create-react-app
funcionarão da mesma forma que em outros pacotes.
yarn
vs npm
instalações globais
O Yarn armazena instalações globais em uma pasta diferente npm
, e é por isso yarn create react-app
que funcionaria imediatamente sem desinstalar o pacote npm global (no que diz respeito ao yarn, o pacote não foi instalado).
Esta é apenas uma solução temporária, pois você precisará se lembrar de sempre usar fios em vez de npm ao usar o Create React App.