Node-redis: Hiredis не устанавливается

Созданный на 11 июл. 2017  ·  13Комментарии  ·  Источник: NodeRedis/node-redis

  • Версия : 2.7.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'
}

пакет.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"
    ]
  }
}

Самый полезный комментарий

На самом деле, это не проблема с Webpack. Это проблема с тем, как redis-parser использовал hiredis . Эту проблему можно решить путем обновления до redis-parser 3.0, которая решает именно эту проблему.

Все 13 Комментарий

Это должно быть связано с webpack. Я решил эту проблему с помощью плагина 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-parser было бы серьезной проблемой.

@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 Большое спасибо за это предложение. Хотя это «взлом», я соглашусь с ним, так как не могу тратить больше времени, чем у меня уже есть, из-за этой проблемы.

Возможно, это хорошая возможность для меня или других членов сообщества выпустить «современную» версию (очень, очень грустно, что мы воздерживаемся от подобных изменений из-за поддержки Node 4).

👎

Может кто-нибудь объяснить, как решить эту проблему? Я не понимаю, почему мне все еще нужно добавлять hiredis в качестве прямой зависимости. Другие предлагают просто не использовать hiredis , так как мне это сделать?
В документации сказано, что парсер по умолчанию не hiredis . Я использую последнюю версию, и hiredis все еще требуется. Webpack с треском терпит неудачу при связывании со средой выполнения AWS lambda.

После всех настроек (изменить на target: 'node' и дополнительно установить 'hiredis') все еще кажется, что
проблема в комплектации. «Uncaught ReferenceError: требование не определено» появляется, когда я пытаюсь использовать Redis с Webpack.

Эта проблема по-прежнему актуальна, так как арендован и не может быть установлен в 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 не бросает (последний PR был 10 дней назад). Тем не менее, я бы развлекал PR @sookoll для обновления до 3.0.

Hiredis не бросает (последний PR был 10 дней назад). Тем не менее, я бы развлекал PR @sookoll для обновления до 3.0.

Извините, я имею в виду наемный узел, очевидно. Не думал, что здесь кто-то может думать вне среды узла.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги