Node-redis: Hiredis wird nicht installiert

Erstellt am 11. Juli 2017  ·  13Kommentare  ·  Quelle: NodeRedis/node-redis

  • Version : 2.7.1
  • Plattform : Node.js 8.1.3 / macOS 10.12.5
  • Beschreibung : Nach dem Ausführen von Garn oder npm install für das Projekt und beim Generieren eines Webpack-Builds erhalte ich diesen Fehler
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.

Die Webpack-Konfiguration lautet wie folgt:

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'
}

Paket.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

Hilfreichster Kommentar

Eigentlich ist das kein Problem mit Webpack. Das ist ein Problem damit, wie redis-parser hiredis verwendet hat. Dieses Problem kann durch ein Upgrade auf redis-parser 3.0 gelöst werden, wodurch genau dieses Problem behoben wird.

Alle 13 Kommentare

Das muss mit Webpack zusammenhängen. Ich wurde dieses Problem durch die Verwendung des nodeExternals-Plugins in der Webpack-Konfiguration gelöst:

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

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

nodeExternals überspringt alle Module im Ordner node_modules bei der serverseitigen Bündelung.

Dies ist ein Problem mit Webpack.

Eigentlich ist das kein Problem mit Webpack. Das ist ein Problem damit, wie redis-parser hiredis verwendet hat. Dieses Problem kann durch ein Upgrade auf redis-parser 3.0 gelöst werden, wodurch genau dieses Problem behoben wird.

@guidobouman wie können wir redis-parser 3.0 verwenden, ohne node_redis zu forken und diese einzelne Abhängigkeit zu aktualisieren? Ich suche seit Wochen erfolglos nach einer Lösung für dieses Problem.

@guidobouman jeder gültige JS-Code sollte für Webpack in Ordnung sein. Das scheint nicht der Fall zu sein und das ist traurig. Abgesehen davon: Ich frage mich sehr, warum jemand Webpack auf Redis verwenden möchte. Das Minimieren von serverseitigem Code ist eine ziemlich schlechte Idee.

@peterschussheim Ich habe im Moment nicht viel Kapazität, um an node_redis zu arbeiten und das ist ziemlich traurig. Ein Upgrade nur des Redis-Parsers wäre jedoch ein ziemlich großer Fehler.

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

Die fehlende Referenz war das zugrunde liegende Problem mit Webpack. Durch das vollständige Entfernen von Hiredis wurde dieser Fehler auch als "Kollateralschaden" behoben.

Warum man Webpack auf serverbezogenem Code ausführen sollte: In serverlosen Umgebungen werden möglicherweise alte Versionen von Node ausgeführt, während jemand in der Lage sein möchte, moderne Syntax wie Importe zu verwenden. (https://github.com/serverless-heaven/serverless-webpack)

@peterschussheim Ich sehe eine andere Möglichkeit, abgesehen davon, die Version für redis-parser in node-redis zu pushen: Installieren Sie hiredis selbst. Auch wenn Sie hiredis wahrscheinlich nicht verwenden, erwartet redis-parser , dass es vorhanden ist.

Eigentlich, @BridgeAR : Dies könnte als Patch-Versionsstoß gelten, da es sich um einen Bugfix handelt. Aber ja, es lässt Node-Versionen unter 4 fallen, obwohl sie schon seit geraumer Zeit EOL sind.

@guidobouman Vielen Dank für diesen Vorschlag. Obwohl es sich um einen "Hack" handelt, akzeptiere ich es, da ich aufgrund dieses Problems nicht mehr Zeit verschwenden kann, als ich bereits habe.

Vielleicht ist dies eine gute Gelegenheit für mich oder andere in der Community, eine „moderne“ Version zu veröffentlichen (sehr, sehr traurig, dass wir wegen der Node-4-Unterstützung mit Änderungen wie dieser zurückhalten).

👎

Kann jemand bitte erklären, wie man dieses Problem behebt? Ich verstehe nicht, warum ich noch hiredis als direkte Abhängigkeit hinzufügen muss. Andere schlagen vor, hiredis einfach nicht zu verwenden, also wie soll ich das erreichen?
Die Dokumentation sagt, dass der Standard-Parser nicht hiredis ist. Ich verwende die neueste Version und hiredis wird noch benötigt. Webpack versagt beim Bündeln für die AWS Lambda-Laufzeit kläglich.

Nach all den Anpassungen (Wechsel auf Ziel: 'node' und zusätzlich 'hiredis' installieren) scheint es immer noch zu geben
ein Problem beim Bündeln. "Uncaught ReferenceError: require is not defined" wird angezeigt, wenn ich versuche, Redis mit Webpack zu verwenden.

Dieses Problem ist immer noch relevant, da Hiredis aufgegeben wurde und nicht in Node 12 installiert werden konnte, Redis-Parser entfernt es auf v3.0.0, aber dieses Paket verwendet immer noch v2.6.0.

Dies wird auch angezeigt, wenn versucht wird, mit packetjs zu bündeln über:

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

Ich bin gespannt, was wir beim Bündeln bekommen (Tree Shaking, Optimierung für Containerisierung usw.). Verkleinerung oder nicht, ich würde gerne die Ergebnisse sehen, wenn es funktioniert hat. Wir bleiben vorerst bei npm install und dem vollständigen Build.

Hiredis gibt nicht auf (letzter PR war vor 10 Tagen). Ich würde jedoch einen PR @sookoll für ein Update auf 3.0 unterhalten.

Hiredis gibt nicht auf (letzter PR war vor 10 Tagen). Ich würde jedoch einen PR @sookoll für ein Update auf 3.0 unterhalten.

Entschuldigung, ich meine offensichtlich den Hiredis-Knoten. Hätte nicht gedacht, dass hier jemand aus der Node-Umgebung heraus denken könnte.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen