Node-redis: لم يتم تثبيت hiredis

تم إنشاؤها على ١١ يوليو ٢٠١٧  ·  13تعليقات  ·  مصدر: NodeRedis/node-redis

  • الإصدار : 2.7.1.1
  • النظام الأساسي : Node.js 8.1.3 / macOS 10.12.5
  • الوصف : بعد تشغيل تثبيت الغزل أو npm على المشروع وأثناء إنشاء حزمة ويب ، حصلت على هذا الخطأ
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.

تكوين حزمة الويب هو كما يلي:

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

التعليق الأكثر فائدة

في الواقع ، هذه ليست مشكلة مع Webpack. هذه مشكلة تتعلق بكيفية استخدام redis-parser hiredis . يمكن حل هذه المشكلة عن طريق الترقية إلى redis-parser 3.0 ، مما يحل هذه المشكلة بالضبط.

ال 13 كومينتر

يجب أن يكون ذلك مرتبطًا بحزمة الويب. لقد تم حل هذه المشكلة باستخدام المكون الإضافي nodeExternals في تكوين حزمة الويب:

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

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

تتخطى nodeExternals أي وحدة نمطية في مجلد node_modules عند تجميع جانب الخادم.

هذه مشكلة في حزمة الويب.

في الواقع ، هذه ليست مشكلة مع Webpack. هذه مشكلة تتعلق بكيفية استخدام redis-parser hiredis . يمكن حل هذه المشكلة عن طريق الترقية إلى redis-parser 3.0 ، مما يحل هذه المشكلة بالضبط.

guidobouman كيف يمكننا استخدام redis-parser 3.0 بدون تفويت node_redis وترقية تلك التبعية الفردية؟ لقد كنت أبحث عن حل لهذه المشكلة لأسابيع دون نجاح.

guidobouman أي كود JS صالح يجب أن يكون جيدًا مقابل Webpack . لا يبدو أن هذا هو الحال وهذا أمر محزن. إلى جانب ذلك: أتساءل كثيرًا لماذا قد يرغب شخص ما في استخدام Webpack على redis. يعد تصغير الكود الجانبي للخادم فكرة سيئة للغاية.

peterschussheim ليس لدي الكثير من القدرات للعمل على node_redis في الوقت الحالي وهذا أمر محزن للغاية. ستكون ترقية محلل redis فقط بمثابة نتوء كبير على الرغم من ذلك.

BridgeAR راجع https://github.com/NodeRedis/node-redis-parser/pull/36

كان المرجع المفقود هو المشكلة الأساسية في Webpack. تم أيضًا إصلاح هذا الخطأ تمامًا باعتباره "ضررًا جانبيًا".

بالنسبة إلى سبب تشغيل حزمة الويب على رمز مرتبط بالخادم: قد تقوم البيئات التي لا تحتوي على خادم بتشغيل إصدارات قديمة من Node بينما يريد شخص ما أن يكون قادرًا على استخدام بناء الجملة الحديث مثل الواردات. (https://github.com/serverless-heaven/serverless-webpack)

peterschussheim أرى خيارًا آخر بخلاف الارتطام بالإصدار redis-parser في node-redis : قم بتثبيت hiredis بنفسك. على الرغم من أنك ربما لا تستخدم hiredis ، إلا أن redis-parser تتوقع وجوده.

في الواقع ، BridgeAR : قد يكون هذا بمثابة نتوء في إصدار التصحيح لأنه خطأ في الإصلاح. لكن نعم ، يسقط إصدارات Node أقل من 4 ، على الرغم من أنها كانت EOL لبعض الوقت.

guidobouman شكرا جزيلا على هذا الاقتراح. على الرغم من أنه "اختراق" ، إلا أنني سأقبله لأنني لا أستطيع أن أضيع وقتًا أكثر مما لدي بالفعل بسبب هذه المشكلة.

ربما تكون هذه فرصة جيدة لي أو للآخرين في المجتمع لإصدار نسخة "حديثة" (حزين للغاية لأننا نمتنع عن إجراء تغييرات كهذه بسبب دعم العقدة 4).

👎

هل يمكن لأحد أن يشرح كيفية إصلاح هذه المشكلة؟ لا أفهم لماذا ما زلت بحاجة إلى إضافة hiredis كتبعية مباشرة. يقترح آخرون عدم استخدام hiredis ، فكيف يمكنني تحقيق ذلك؟
تشير الوثائق إلى أن المحلل اللغوي الافتراضي ليس hiredis . أنا أستخدم أحدث إصدار ولا يزال مطلوبًا hiredis . يفشل Webpack فشلاً ذريعاً عند تجميعه في وقت تشغيل AWS lambda.

بعد كل التعديلات (التغيير إلى الهدف: "العقدة" بالإضافة إلى تثبيت "hiredis") ، يبدو أنه لا يزال هناك
مشكلة في التجميع. تظهر رسالة "Uncaught ReferenceError: request is not selected" عندما أحاول استخدام Redis مع Webpack.

لا تزال هذه المشكلة ذات صلة ، حيث تم إلغاء hiredis وفشل التثبيت في Node 12 ، قام redis-parser بإزالته على الإصدار 3.0.0 ولكن هذه الحزمة لا تزال تستخدم الإصدار 2.6.0.

نرى هذا أيضًا عند محاولة التجميع مع الطرود عبر:

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

أشعر بالفضول لمعرفة ما نحصل عليه عند التجميع (اهتزاز الشجرة ، وتحسين النقل بالحاويات ، وما إلى ذلك). تصغير أم لا ، أود أن أرى نتائج هذا إذا نجح. سنلتزم بـ npm install والإصدار الكامل في الوقت الحالي.

لم يتم التخلي عن Hiredis (آخر العلاقات العامة كانت قبل 10 أيام). ومع ذلك ، سأستمتع بـ PRsookoll للحصول على تحديث إلى 3.0.

لم يتم التخلي عن Hiredis (آخر العلاقات العامة كانت قبل 10 أيام). ومع ذلك ، سأستمتع بـ PRsookoll للحصول على تحديث إلى 3.0.

آسف ، أعني hiredis-node بوضوح. لا أعتقد أن شخصًا ما يمكن أن يفكر خارج بيئة العقدة هنا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

Stono picture Stono  ·  6تعليقات

adamgajzlerowicz picture adamgajzlerowicz  ·  4تعليقات

michaelwittig picture michaelwittig  ·  3تعليقات

shmendo picture shmendo  ·  6تعليقات

yuany picture yuany  ·  4تعليقات