Introdução
Neste projeto, você aprenderá como corrigir um bug na biblioteca vue-router-2.7.0 relacionado ao tratamento de valores null no parâmetro query.
👀 Visualização

🎯 Tarefas
Neste projeto, você aprenderá:
- Como localizar e entender a função
isObjectEqualno arquivovue-router-2.7.0/src/util/route.js. - Como corrigir a função
isObjectEqualpara lidar corretamente com valoresnull. - Como reconstruir e lançar o projeto
vue-router-2.7.0com a função corrigida. - Como testar a correção verificando o console do navegador para a ausência das mensagens de erro anteriores.
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Identificar e corrigir um bug em uma biblioteca de terceiros.
- Trabalhar com a biblioteca
vue-router-2.7.0e entender suas funções internas. - Reconstruir e lançar um projeto após fazer alterações no código.
- Testar a correção verificando o console do navegador para mensagens de erro.
Corrigir a Função isObjectEqual
Para começar, observe a estrutura de diretórios dos arquivos à esquerda, conforme a seguir:
├── vue-router-2.7.0
├── vue.min.js
└── index.html
Clique no botão Go Live no canto inferior direito do WebIDE para executar o projeto.
Em seguida, abra "Web 8080" no topo da VM e atualize-o manualmente, clique em "test" e abra a opção Console no console do navegador. Você verá duas mensagens de erro, que são TypeError: Cannot convert undefined or null to object e Uncaught TypeError: Cannot convert undefined or null to object.

Nesta etapa, você aprenderá como corrigir a função isObjectEqual no arquivo vue-router-2.7.0/src/util/route.js para lidar com valores null corretamente.
- Abra o arquivo
vue-router-2.7.0/src/util/route.js. - Localize a função
isObjectEqual:
function isObjectEqual(a = {}, b = {}): boolean {
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return false;
}
return aKeys.every((key) => {
const aVal = a[key];
const bVal = b[key];
// check nested equality
if (typeof aVal === "object" && typeof bVal === "object") {
return isObjectEqual(aVal, bVal);
}
return String(aVal) === String(bVal);
});
}
- Atualize a função para lidar com valores
nullcorretamente:
function isObjectEqual(a = {}, b = {}): boolean {
if (!a || !b) return a === b;
const aKeys = Object.keys(a);
const bKeys = Object.keys(b);
if (aKeys.length !== bKeys.length) {
return false;
}
return aKeys.every((key) => {
const aVal = a[key];
const bVal = b[key];
// check nested equality
if (typeof aVal === "object" && typeof bVal === "object") {
return isObjectEqual(aVal, bVal);
}
return String(aVal) === String(bVal);
});
}
As alterações são:
- Adicionada uma condição para verificar se
aoubénullouundefined. Se um deles fornullouundefined, a função retornaráa === b. - Isso garante que a função lide corretamente com valores
nullno parâmetroquery.
Reconstruir e Testar o Projeto
Nesta etapa, você reconstruirá e testará o projeto vue-router-2.7.0 após corrigir a função isObjectEqual.
- No terminal, navegue até o diretório
vue-router-2.7.0. - Execute o comando
npm installpara instalar as dependências. Este processo pode levar um tempo, por favor, seja paciente. (Se ele ficar preso por muito tempo, pressioneCtrl+Cpara terminar o processo e, em seguida, execute este comando novamente.) - Após a conclusão da instalação, execute o comando
npm run buildpara reconstruir e lançar o projeto. Isso gerará a bibliotecavue-router-2.7.0atualizada com a funçãoisObjectEqualcorrigida. - Volte para a página da web e atualize a página.
- Clique em "test" e abra o console na aba
Consolepara verificar, você não verá mais a mensagem de erro acima.
Se as mensagens de erro desaparecerem, a correção foi bem-sucedida. Você concluiu o projeto!

Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



