Node-redis: contratadois não está sendo instalado

Criado em 11 jul. 2017  ·  13Comentários  ·  Fonte: NodeRedis/node-redis

  • Versão : 2.7.1
  • Plataforma : Node.js 8.1.3 / macOS 10.12.5
  • Descrição : Depois de executar o yarn ou npm install no projeto e ao gerar uma compilação do webpack, recebi este erro
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.

A configuração do webpack é a seguinte:

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

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

Comentários muito úteis

Na verdade, isso não é um problema com o Webpack. Esse é um problema de como redis-parser usou hiredis . Esse problema pode ser resolvido atualizando para redis-parser 3.0, que resolve exatamente esse problema.

Todos 13 comentários

Isso deve estar relacionado com o webpack. Eu resolvi esse problema usando o plugin nodeExternals na configuração do webpack:

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

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

nodeExternals ignora qualquer módulo na pasta node_modules no pacote do lado do servidor.

Este é um problema com o webpack.

Na verdade, isso não é um problema com o Webpack. Esse é um problema de como redis-parser usou hiredis . Esse problema pode ser resolvido atualizando para redis-parser 3.0, que resolve exatamente esse problema.

@guidobouman como podemos usar redis-parser 3.0 sem bifurcar node_redis e atualizar essa única dependência? Estou procurando uma solução para esse problema há semanas sem sucesso.

@guidobouman qualquer código JS válido deve ser bom para Webpack . Isso não parece ser o caso e isso é triste. Tirando isso: eu me pergunto por que alguém iria querer usar o Webpack no redis. Minificar o código do lado do servidor é uma péssima ideia.

@peterschussheim Não tenho muita capacidade para trabalhar no node_redis no momento e isso é muito triste. Atualizar apenas o redis-parser seria um grande aumento.

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

A referência ausente era o problema subjacente com o Webpack. A remoção completa de contratados também corrigiu esse bug como "dano colateral".

Por que alguém executaria o webpack no código relacionado ao servidor: ambientes sem servidor podem executar versões antigas do Node enquanto alguém deseja usar sintaxe moderna como importações. (https://github.com/serverless-heaven/serverless-webpack)

@peterschussheim , vejo outra opção além de aumentar a versão por redis-parser em node-redis : instale hiredis você mesmo. Mesmo que você provavelmente não esteja usando hiredis , redis-parser espera que ele esteja presente.

Na verdade, @BridgeAR : Isso pode ser um aumento na versão do patch, pois é uma correção de bug. Mas sim, ele deixa as versões do Node abaixo de 4, mesmo que tenham sido EOL por algum tempo.

@guidobouman Muito obrigado por essa sugestão. Apesar de ser um 'hack', vou aceitar pois não posso perder mais tempo do que já tenho devido a este problema.

Talvez esta seja uma boa oportunidade para mim ou para outros membros da comunidade lançar uma versão 'moderna' (muito, muito triste por estarmos adiando mudanças como essa por causa do suporte ao nó 4).

👎

Alguém por favor pode explicar como corrigir esse problema? Não entendo por que ainda preciso adicionar hiredis como uma dependência direta. Outros sugerem simplesmente não usar hiredis , então como devo fazer isso?
A documentação diz que o analisador padrão não é hiredis . Estou usando a versão mais recente e hiredis ainda está sendo necessário. O Webpack está falhando miseravelmente ao agrupar o tempo de execução do AWS lambda.

Após todos os ajustes (mude para o destino: 'node' e instale adicionalmente 'hiredis'), ainda parece haver
um problema no agrupamento. "Uncaught ReferenceError: require não está definido" aparece quando tento usar o Redis com o Webpack.

Este problema ainda é relevante, já que o rentalis foi abandonado e falhou ao instalar no Node 12, o redis-parser o removeu na v3.0.0, mas este pacote ainda está usando a v2.6.0.

Também vendo isso ao tentar empacotar com parceljs via:

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

Estou curioso para ver o que obtemos ao agrupar (agitação de árvores, otimização para conteinerização, etc.). Minificação ou não, gostaria de ver os resultados disso se funcionou. Vamos ficar com npm install e a compilação completa por enquanto.

Hiredis não é abandono (o último PR foi há 10 dias). No entanto, entretenho um PR @sookoll para uma atualização para 3.0.

Hiredis não é abandono (o último PR foi há 10 dias). No entanto, entretenho um PR @sookoll para uma atualização para 3.0.

Desculpe, quero dizer contratadois-node obviamente. Não achei que alguém pudesse pensar fora do ambiente do nó aqui.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

twappworld picture twappworld  ·  7Comentários

Atala picture Atala  ·  3Comentários

Mickael-van-der-Beek picture Mickael-van-der-Beek  ·  6Comentários

juriansluiman picture juriansluiman  ·  3Comentários

Alchemystic picture Alchemystic  ·  6Comentários