O erroMódulo não encontrado: Erro: Não é possível resolver ‘./something’ no Webpack significa que o empacotador não conseguiu encontrar um módulo que você importou. Isso tem várias causas – pacotes ausentes, caminhos errados, distinção entre maiúsculas e minúsculas ou problemas de configuração. Veja como consertar cada um.
📋 Table of Contents
- O que esse erro significa
- Causa 1: Pacote não instalado
- Causa 2: Caminho relativo errado
- Causa 3: Sensibilidade a maiúsculas e minúsculas
- Causa 4: Extensão de arquivo ausente na configuração
- Causa 5: Aliases de caminho não configurados
- Causa 6: Importando um diretório sem arquivo de índice
- Causa 7: Módulos principais do Node.js no pacote do navegador
- Etapas de depuração
- Perguntas Frequentes
- Conclusão
O que esse erro significa
O Webpack constrói um gráfico de dependência seguindo suas importações. “Não é possível resolver” significa que seguiu uma importação, mas não conseguiu encontrar o arquivo ou pacote de destino. O erro geralmente nomeia o módulo que não foi encontrado e o arquivo que o importou – comece por aí.
Causa 1: Pacote não instalado
# Error: Can't resolve 'lodash'
# The package isn't installed
# ✅ Install it
npm install lodash
# Verify it's in package.json and node_modules
npm list lodash
# If node_modules is corrupted, reinstall
rm -rf node_modules package-lock.json
npm install
Causa 2: Caminho relativo errado
// 🐛 Wrong path - file is somewhere else
import { helper } from './utils/helper'; // but it's at ./lib/helper
// ✅ Fix the path
import { helper } from './lib/helper';
// Common mistakes:
// - Missing ./ for local files (Webpack looks in node_modules without it)
import x from 'components/Button'; // ❌ looks in node_modules
import x from './components/Button'; // ✅ relative to current file
// - Wrong number of ../ for parent directories
import x from '../../utils/x'; // count directories carefully
Causa 3: Sensibilidade a maiúsculas e minúsculas
// 🐛 Works on Mac/Windows (case-insensitive) but fails on Linux/CI
import Button from './components/button'; // file is Button.jsx
// ✅ Match the exact case of the filename
import Button from './components/Button'; // Button.jsx
// Case mismatches are the #1 cause of "works locally, fails in CI"
// because Linux file systems are case-sensitive
Causa 4: Extensão de arquivo ausente na configuração
// 🐛 Importing without extension, but Webpack doesn't know to try .tsx
import App from './App'; // App.tsx exists but Webpack can't resolve
// ✅ Add extensions to Webpack resolve config
// webpack.config.js
module.exports = {
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
// Now Webpack tries these extensions when none is specified
},
};
Causa 5: Aliases de caminho não configurados
// 🐛 Using @ alias but Webpack doesn't know it
import Button from '@/components/Button'; // Can't resolve '@'
// ✅ Configure the alias in webpack.config.js
const path = require('path');
module.exports = {
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
},
},
};
// If using TypeScript, also add to tsconfig.json:
{
"compilerOptions": {
"baseUrl": ".",
"paths": { "@/*": ["src/*"] }
}
}
// Both must agree - Webpack for bundling, tsconfig for type checking
Causa 6: Importando um diretório sem arquivo de índice
// 🐛 Importing a folder that has no index file
import { utils } from './helpers'; // ./helpers is a folder
// ✅ Ensure the folder has an index.js/ts, or import the specific file
// ./helpers/index.js exports the utils, OR:
import { utils } from './helpers/utils'; // specific file
Causa 7: Módulos principais do Node.js no pacote do navegador
// 🐛 Can't resolve 'fs' or 'path' - Node modules don't exist in browsers
// A package tried to use Node.js core modules in browser code
// ✅ In Webpack 5, configure fallbacks or exclude them
module.exports = {
resolve: {
fallback: {
"fs": false, // not available in browser
"path": require.resolve("path-browserify"),
"crypto": require.resolve("crypto-browserify"),
},
},
};
// Or find a browser-compatible alternative to the package
Etapas de depuração
- Leia o erro completo — nomeia o módulo e o arquivo de importação
- Verifique se o pacote está instalado —
npm list <module> - Verifique o caminho e o caso — ortografia exata e letras maiúsculas
- Verifique resolve.extensions — a extensão do arquivo está configurada?
- Verifique os apelidos – @ ou outros aliases estão configurados no Webpack e no tsconfig?
- Reinicie o servidor de desenvolvimento — alterações de configuração exigem reinicialização
Perguntas Frequentes
P: Por que funciona localmente, mas falha na CI/produção?
R: Quase sempre diferencia maiúsculas de minúsculas – macOS/Windows não diferencia maiúsculas de minúsculas, Linux (CI/produção) diferencia maiúsculas de minúsculas. ./components/button funciona localmente, mas falha no Linux se o arquivo forButton.jsx. Sempre corresponda ao caso exato do nome do arquivo.
P: Instalei o pacote, mas ainda recebo “não consigo resolver”. Por que?
R: Reinicie o servidor de desenvolvimento (caches Webpack). Verifique se o pacote está realmente em node_modules e package.json. Se for uma importação local, verifique o caminho e o caso. Exclua node_modules e reinstale se a lista de módulos parecer errada.
P: Como faço para importar sem especificar extensões de arquivo?
R: Adicione as extensões aresolve.extensions em webpack.config.js (por exemplo,['.js', '.jsx', '.ts', '.tsx']). Em seguida, o Webpack tenta cada extensão quando você importa sem uma. Reinicie o servidor de desenvolvimento após alterar a configuração.
P: Como configuro aliases de @path?
R: Configurarresolve.alias em webpack.config.js (mapeando @ para seu diretório src) ANDpaths em tsconfig.json se estiver usando TypeScript. Ambos devem concordar – Webpack para empacotamento, TypeScript para verificação de tipo. Reinicie após alterar.
P: Por que o Webpack não consegue resolver ‘fs’ ou ‘path’?
R: Esses são módulos principais do Node.js que não existem em navegadores. Um pacote está tentando usá-los no código do navegador. Configurarresolve.fallback no Webpack 5 para fornecer alternativas de navegador (ou false para excluir) ou encontrar um pacote compatível com navegador.
Conclusão
“Módulo não encontrado: não é possível resolver” no Webpack significa que o empacotador não conseguiu encontrar um módulo importado. Analise as causas:certifique-se de que o pacote esteja instalado, verifique o caminho E maiúsculas e minúsculas (a diferenciação de maiúsculas e minúsculas causa a maioria das falhas de CI), configure resolve.extensions para importações sem extensão, configure aliases de caminho no Webpack e no tsconfig e manipule os módulos principais do Node com substitutos para pacotes de navegador. Leia o erro completo – ele nomeia o módulo ausente e o arquivo de importação, apontando para a fonte. Reinicie o servidor de desenvolvimento após as alterações de configuração. A maioria dos casos é resolvida corrigindo o caminho de importação (veja o caso!) ou instalando o pacote ausente. Depois que o Webpack puder seguir a importação para um arquivo real, o erro será eliminado.
🔗 Share this article
✍️ Leave a Comment