Node-redis: no se está instalando contratadais

Creado en 11 jul. 2017  ·  13Comentarios  ·  Fuente: NodeRedis/node-redis

  • Versión : 2.7.1
  • Plataforma : Node.js 8.1.3 / macOS 10.12.5
  • Descripción : después de ejecutar yarn o npm install en el proyecto y mientras generaba una compilación de paquete web, recibí este error
ERROR in ./node_modules/redis-parser/lib/hiredis.js
Module not found: Error: Can't resolve 'hiredis' in
error Command failed with exit code 2.

La configuración del paquete web es la siguiente:

var path = require('path')

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: ['babel-loader']
      }
    ]
  },
  target: 'node'
}

paquete.json

{
  "version": "1.0.0",
  "main": "src/index.js",
  "license": "MIT",
  "dependencies": {
    "dotenv": "^4.0.0",
    "koa": "^2.3.0",
    "koa-bodyparser": "^4.2.0",
    "koa-router": "^7.2.1",
    "node-fetch": "^1.7.1",
    "redis": "^2.7.1"
  },
  "devDependencies": {
    "babel-cli": "^6.24.1",
    "babel-loader": "^7.1.1",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "babel-plugin-transform-object-rest-spread": "^6.23.0",
    "babel-preset-env": "^1.5.2",
    "webpack": "^3.0.0"
  },
  "scripts": {
    "start": "node dist/bundle",
    "build": "webpack"
  },
  "babel": {
    "presets": [
      [
        "env",
        {
          "targets": {
            "node": "current"
          }
        }
      ]
    ],
    "plugins": [
      "transform-object-rest-spread",
      "transform-class-properties"
    ]
  }
}
invalid

Comentario más útil

En realidad, eso no es un problema con Webpack. Ese es un problema con la forma en que redis-parser usó hiredis . Este problema se puede resolver actualizando a redis-parser 3.0, que resuelve exactamente este problema.

Todos 13 comentarios

Eso debe estar relacionado con webpack. Resolví este problema usando el complemento nodeExternals en la configuración del paquete web:

const nodeExternals = require('webpack-node-externals')

module.exports = {
  ...
  externals: [nodeExternals()],
  target: 'node'
}

nodeExternals omite cualquier módulo en la carpeta node_modules en la agrupación del lado del servidor.

Este es un problema con el paquete web.

En realidad, eso no es un problema con Webpack. Ese es un problema con la forma en que redis-parser usó hiredis . Este problema se puede resolver actualizando a redis-parser 3.0, que resuelve exactamente este problema.

@guidobouman , ¿cómo podemos usar redis-parser 3.0 sin bifurcar node_redis y actualizar esa única dependencia? He estado buscando una solución a este problema durante semanas sin éxito.

@guidobouman cualquier código JS válido debería estar bien por Webpack . Ese no parece ser el caso y eso es triste. Aparte de eso: me pregunto mucho por qué alguien querría usar Webpack en redis. Minificar el código del lado del servidor es una idea bastante mala.

@peterschussheim No tengo mucha capacidad para trabajar en node_redis en este momento y eso es bastante triste. Sin embargo, actualizar solo el redis-parser sería un gran bache.

@BridgeAR Ver https://github.com/NodeRedis/node-redis-parser/pull/36

La referencia que faltaba era el problema subyacente con Webpack. La eliminación de contrataciones por completo también solucionó ese error como "daño colateral".

En cuanto a por qué uno ejecutaría webpack en código relacionado con el servidor: los entornos sin servidor pueden ejecutar versiones antiguas de Node mientras que alguien quiere poder usar sintaxis moderna como importaciones. (https://github.com/serverless-heaven/serverless-webpack)

@peterschussheim Veo otra opción además de subir la versión por redis-parser en node-redis : instale hiredis usted mismo. Aunque probablemente no esté usando hiredis , redis-parser espera que esté presente.

En realidad, @BridgeAR : esto podría funcionar como un aumento de la versión del parche, ya que es una corrección de errores. Pero sí, reduce las versiones de Node por debajo de 4, a pesar de que han estado EOL durante bastante tiempo.

@guidobouman Muchas gracias por esa sugerencia. Aunque es un 'hack', lo aceptaré ya que no puedo perder más tiempo del que ya tengo debido a este problema.

Tal vez esta sea una buena oportunidad para mí o para otros en la comunidad para lanzar una versión 'moderna' (muy, muy triste que estemos retrasando cambios como este debido al soporte del nodo 4).

👎

¿Puede alguien explicar cómo solucionar este problema? No entiendo por qué todavía necesito agregar hiredis como una dependencia directa. Otros sugieren simplemente no usar hiredis , entonces, ¿cómo debo lograr eso?
La documentación dice que el analizador predeterminado no es hiredis . Estoy usando la última versión y aún se requiere hiredis . Webpack está fallando miserablemente cuando se empaqueta para el tiempo de ejecución de AWS lambda.

Después de todos los ajustes (cambiar al objetivo: 'nodo' y, además, instalar 'hiredis'), todavía parece haber
un problema en la agrupación. "Error de referencia no capturado: el requisito no está definido" aparece cuando intento usar Redis con Webpack.

Este problema sigue siendo relevante, ya que contratada está anexada y no se pudo instalar en el Nodo 12, redis-parser lo eliminó en v3.0.0 pero este paquete aún usa v2.6.0.

También veo esto cuando intento agrupar con packagejs a través de:

parcel build src/index.ts --bundle-node-modules --target node --no-source-maps --no-minify

Tengo curiosidad por ver qué obtenemos al agrupar (sacudidas de árboles, optimización para contenedores, etc.). Minificación o no, me gustaría ver los resultados de esto si funcionó. Nos quedaremos con npm install y la compilación completa por ahora.

Hiredis no es abandono (el último PR fue hace 10 días). Sin embargo, entretendría a un PR @sookoll para una actualización a 3.0.

Hiredis no es abandono (el último PR fue hace 10 días). Sin embargo, entretendría a un PR @sookoll para una actualización a 3.0.

Lo siento, me refiero a contrató-nodo obviamente. No pensé que alguien pudiera pensar fuera del entorno del nodo aquí.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

dotSlashLu picture dotSlashLu  ·  5Comentarios

adamgajzlerowicz picture adamgajzlerowicz  ·  4Comentarios

Mickael-van-der-Beek picture Mickael-van-der-Beek  ·  6Comentarios

shmendo picture shmendo  ·  6Comentarios

betimer picture betimer  ·  5Comentarios