Node-redis: embauchéis n'est pas en cours d'installation

Créé le 11 juil. 2017  ·  13Commentaires  ·  Source: NodeRedis/node-redis

  • Version : 2.7.1
  • Plateforme : Node.js 8.1.3 / macOS 10.12.5
  • Description : Après avoir exécuté yarn ou npm install sur le projet et lors de la génération d'un build webpack, j'ai eu cette erreur
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 configuration du webpack est la suivante :

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

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

Commentaire le plus utile

En fait, ce n'est pas un problème avec Webpack. C'est un problème avec la façon dont redis-parser a utilisé hiredis . Ce problème peut être résolu en mettant à niveau vers redis-parser 3.0, ce qui résout exactement ce problème.

Tous les 13 commentaires

Cela doit être lié à webpack. J'ai résolu ce problème en utilisant le plugin nodeExternals dans la configuration webpack :

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

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

nodeExternals ignore tout module du dossier node_modules lors du regroupement côté serveur.

Il s'agit d'un problème avec Webpack.

En fait, ce n'est pas un problème avec Webpack. C'est un problème avec la façon dont redis-parser a utilisé hiredis . Ce problème peut être résolu en mettant à niveau vers redis-parser 3.0, ce qui résout exactement ce problème.

@guidobouman comment pouvons-nous utiliser redis-parser 3.0 sans bifurquer node_redis et mettre à jour cette seule dépendance ? J'ai cherché une solution à ce problème pendant des semaines sans succès.

@guidobouman tout code JS valide devrait convenir pour Webpack . Cela ne semble pas être le cas et c'est dommage. Cela mis à part: je me demande vraiment pourquoi quelqu'un voudrait utiliser Webpack sur redis. Minifier le code côté serveur est une très mauvaise idée.

@peterschussheim Je n'ai pas beaucoup de capacité pour travailler sur node_redis pour le moment et c'est assez triste. Mettre à niveau uniquement le redis-parser serait cependant une bosse majeure.

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

La référence manquante était le problème sous-jacent avec Webpack. La suppression complète de l'embauché a également corrigé ce bogue en tant que "dommage collatéral".

Quant à savoir pourquoi on exécuterait webpack sur du code lié au serveur : les environnements sans serveur peuvent exécuter d'anciennes versions de Node alors que quelqu'un veut pouvoir utiliser une syntaxe moderne comme les importations. (https://github.com/serverless-heaven/serverless-webpack)

@peterschussheim Je vois une autre option en plus de remplacer la version pour redis-parser en node-redis : installez hiredis vous-même. Même si vous n'utilisez probablement pas hiredis , redis-parser s'attend à ce qu'il soit présent.

En fait, @BridgeAR : Cela pourrait être un correctif de version car il s'agit d'une correction de bogue. Mais oui, il laisse tomber les versions de nœud en dessous de 4, même si elles sont en fin de vie depuis un certain temps.

@guidobouman Merci beaucoup pour cette suggestion. Bien qu'il s'agisse d'un "hack", je l'accepterai car je ne peux pas perdre plus de temps que j'en ai déjà à cause de ce problème.

C'est peut-être une bonne occasion pour moi ou d'autres membres de la communauté de publier une version "moderne" (très, très triste que nous retenions des changements comme celui-ci à cause du support du nœud 4).

👎

Quelqu'un peut-il s'il vous plaît expliquer comment résoudre ce problème? Je ne comprends pas pourquoi j'ai encore besoin d'ajouter hiredis comme dépendance directe. D'autres suggèrent simplement de ne pas utiliser hiredis , alors comment dois-je y parvenir ?
La documentation indique que l'analyseur par défaut n'est pas hiredis . J'utilise la dernière version et hiredis est toujours requis. Webpack échoue lamentablement lors du regroupement pour le runtime AWS lambda.

Après tous les ajustements (passez à la cible : 'node' et installez en plus 'hiredis'), il semble toujours y avoir
un problème de regroupement. "Uncaught ReferenceError: require is not defined" s'affiche lorsque j'essaie d'utiliser Redis avec Webpack.

Ce problème est toujours d'actualité, car hireis est abondant et n'a pas pu être installé dans le nœud 12, redis-parser le supprime sur la v3.0.0 mais ce package utilise toujours la v2.6.0.

Voir également cela lorsque vous essayez de regrouper avec parceljs via :

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

Je suis curieux de voir ce que nous obtenons lors du regroupement (treeshaking, optimisation pour la conteneurisation, etc.). Minification ou non, j'aimerais voir les résultats de cela si cela a fonctionné. Nous nous en tiendrons à npm install et à la version complète pour le moment.

Hiredis n'est pas abandonné (le dernier PR date d'il y a 10 jours). Cependant, je divertirais un PR @sookoll pour une mise à jour vers 3.0.

Hiredis n'est pas abandonné (le dernier PR date d'il y a 10 jours). Cependant, je divertirais un PR @sookoll pour une mise à jour vers 3.0.

Désolé, je veux dire embauchés-nœud évidemment. Je ne pensais pas que quelqu'un pourrait penser à l'environnement de nœud ici.

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

dotSlashLu picture dotSlashLu  ·  5Commentaires

lemon707 picture lemon707  ·  3Commentaires

ghost picture ghost  ·  3Commentaires

id0Sch picture id0Sch  ·  4Commentaires

aletorrado picture aletorrado  ·  6Commentaires