NODE_COMPATIBILITY_FIX.md•3.31 kB
# Fix: Compatibilidad con Node.js v12+
## ✅ Problema Solucionado
### Error Original
```
SyntaxError: Unexpected token '.'
at Loader.moduleStrategy (internal/modules/esm/translators.js:140:18)
```
### Causa
Claude Desktop estaba usando **Node.js v12** que **no soporta** el operador de optional chaining (`?.`) introducido en Node.js v14.
### Código Problemático
```typescript
// ❌ No funciona en Node.js v12
const name = market?.name;
const logo = response.markets[idx]?.logo;
const focus = args?.focus || 'default';
```
### Solución Aplicada
Reemplazamos todo el optional chaining con código compatible:
```typescript
// ✅ Funciona en Node.js v12+
const name = market ? market.name : 'Unknown';
const logo = response.markets[idx] ? response.markets[idx].logo : '';
const focus = (args && args.focus) || 'default';
```
## 📝 Archivos Corregidos
1. `src/tools/searchProducts.ts`
2. `src/tools/searchByCode.ts`
3. `src/prompts/priceExpert.ts`
4. `src/client/superPrecioApi.ts`
## 🔄 Cómo Aplicar el Fix
### 1. El código ya está corregido
Los archivos fuente ya no usan optional chaining.
### 2. Recompilar
```bash
cd /Users/diegopacheco/Development/superprecio_mcp
npm run build
```
### 3. Reiniciar Claude Desktop
```bash
# Cmd+Q para cerrar completamente
# Abrir Claude Desktop de nuevo
```
## ✅ Verificación
Para verificar que el build está limpio:
```bash
# No debería devolver nada
grep "\?\." build/**/*.js
```
## 📊 Compatibilidad
### Antes
- Requería: Node.js v14+
- Error en: Node.js v12
### Ahora
- Compatible con: Node.js v12+
- Funciona en todas las versiones de Node
## 🎯 Por Qué Pasó Esto
Claude Desktop puede usar diferentes versiones de Node.js dependiendo de:
1. La instalación del sistema
2. nvm (si está instalado)
3. La configuración de PATH
Aunque tu sistema tenga Node.js v22, Claude Desktop puede estar usando una versión más antigua que encuentra primero en el PATH.
## 💡 Buenas Prácticas
Para evitar esto en el futuro:
### 1. Configurar target en tsconfig.json
Ya está configurado para ES2022, pero TypeScript no previene todas las features de JS moderno.
### 2. Usar plugin de ESLint
Agregar reglas para detectar features no soportadas:
```json
{
"rules": {
"no-unsafe-optional-chaining": "error"
}
}
```
### 3. Especificar versión mínima de Node
En `package.json`:
```json
{
"engines": {
"node": ">=12.0.0"
}
}
```
Ya lo tenemos como `>=18.0.0`, pero el código ahora es compatible con v12+.
## 🔍 Features de JavaScript Modernas a Evitar
Para compatibilidad con Node.js v12:
| Feature | Versión Mínima | Alternativa Compatible |
|---------|----------------|------------------------|
| `?.` Optional chaining | v14 | `obj ? obj.prop : default` |
| `??` Nullish coalescing | v14 | <code>val !== null && val !== undefined ? val : default</code> |
| `#private` fields | v12 | `_private` convention |
| Top-level await | v14.8 | Async IIFE |
## 📚 Referencias
- [Node.js v12 Features](https://nodejs.org/docs/latest-v12.x/api/)
- [Node.js v14 Features](https://nodejs.org/docs/latest-v14.x/api/)
- [Optional Chaining Compatibility](https://caniuse.com/mdn-javascript_operators_optional_chaining)
---
**Estado**: ✅ Corregido y verificado
**Fecha**: 2025-10-18
**Versión**: 1.0.0