Saltar al contenido principal
Webpack

Webpack: Module not found: Error: Can't resolve 'X'

Cómo solucionar el error 'Module not found: Can't resolve' en Webpack. Causas por rutas incorrectas, alias no configurados y polyfills de Node.js.

Error: ERROR in ./src/index.js: Module not found: Error: Can't resolve

¿Por qué ocurre?

Webpack no puede resolver el módulo porque: - La ruta del import es incorrecta (relativa mal escrita) - El paquete no está instalado (`npm install` pendiente) - Los alias de Webpack no están configurados (`@/components/...`) - En Webpack 5: módulos de Node.js core (`path`, `crypto`, `fs`) ya no se polyfillean automáticamente - Case sensitivity: en Linux, `import './Button'` falla si el archivo se llama `button.js`

Solución paso a paso

1. Verificar que el paquete está instalado

npm install nombre-del-paquete
# o
npm install  # instalar todas las dependencias

2. Revisar la ruta del import

// ❌ Ruta mal escrita
import Header from './components/header'  // ¿existe ese archivo?
import utils from '../utills/helpers'      // typo: "utills"

// ✅ Ruta correcta import Header from './components/Header' // case sensitive en Linux import utils from '../utils/helpers'

3. Configurar alias en webpack.config.js

const path = require('path');

module.exports = { resolve: { alias: { // ✅ Permite usar @/ como raíz del proyecto '@': path.resolve(__dirname, 'src'), // ✅ Alias específicos '@components': path.resolve(__dirname, 'src/components'), '@utils': path.resolve(__dirname, 'src/utils'), }, extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'] } };

// Ahora puedes usar:
import Header from '@/components/Header'
import { formatDate } from '@utils/date'

4. Polyfills de Node.js en Webpack 5

# Instalar polyfills necesarios
npm install --save-dev crypto-browserify stream-browserify buffer process
// webpack.config.js
const webpack = require('webpack');

module.exports = { resolve: { fallback: { "crypto": require.resolve("crypto-browserify"), "stream": require.resolve("stream-browserify"), "buffer": require.resolve("buffer"), "path": require.resolve("path-browserify"), "fs": false, // No disponible en browser "net": false, "tls": false, } }, plugins: [ new webpack.ProvidePlugin({ process: 'process/browser', Buffer: ['buffer', 'Buffer'], }), ] };

5. Extensions — importar sin extensión

// webpack.config.js
module.exports = {
  resolve: {
    extensions: ['.tsx', '.ts', '.jsx', '.js', '.json']
  }
};

// Ahora funciona sin extensión: import MyComponent from './MyComponent' // busca .tsx, .ts, .jsx, .js

Cómo evitarlo en el futuro

- Ejecuta `npm install` después de clonar el repositorio - Configura alias desde el inicio para evitar rutas relativas complejas (`../../`) - En Webpack 5, revisa la [documentación de node polyfills](https://webpack.js.org/configuration/resolve/#resolvefallback) si usas librerías que dependían de Node.js APIs - En Linux, asegúrate de que los nombres de archivos son consistentes en mayúsculas/minúsculas

Webpackbundlermódulosaliaspolyfill

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.