Node-redis: disewa tidak sedang dipasang

Dibuat pada 11 Jul 2017  ·  13Komentar  ·  Sumber: NodeRedis/node-redis

  • Versi : 2.7.1
  • Platform : Node.js 8.1.3 / macOS 10.12.5
  • Deskripsi : Setelah menjalankan yarn atau npm install pada proyek dan saat membuat webpack build, saya mendapatkan kesalahan ini
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.

Konfigurasi webpack adalah sebagai berikut:

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

Komentar yang paling membantu

Sebenarnya, itu bukan masalah dengan Webpack. Itu masalah dengan bagaimana redis-parser digunakan hiredis . Masalah ini dapat diselesaikan dengan memutakhirkan ke redis-parser 3.0, yang memecahkan masalah ini dengan tepat.

Semua 13 komentar

Itu harus terkait dengan webpack. Saya memecahkan masalah ini dengan menggunakan plugin nodeExternals di konfigurasi webpack:

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

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

nodeExternals melewatkan modul apa pun di folder node_modules di bundling sisi server.

Ini adalah masalah dengan webpack.

Sebenarnya, itu bukan masalah dengan Webpack. Itu masalah dengan bagaimana redis-parser digunakan hiredis . Masalah ini dapat diselesaikan dengan memutakhirkan ke redis-parser 3.0, yang memecahkan masalah ini dengan tepat.

@guidobouman bagaimana kita bisa menggunakan redis-parser 3.0 tanpa forking node_redis dan memutakhirkan ketergantungan tunggal itu? Saya telah mencari solusi untuk masalah ini selama berminggu-minggu tanpa hasil.

@guidobouman kode JS yang valid harus baik-baik saja untuk Webpack . Tampaknya tidak demikian dan itu menyedihkan. Selain itu: Saya sangat heran mengapa seseorang ingin menggunakan Webpack di redis. Memperkecil kode sisi server adalah ide yang sangat buruk.

@peterschussheim Saya tidak memiliki banyak kapasitas untuk bekerja pada node_redis saat ini dan itu sangat menyedihkan. Memutakhirkan hanya redis-parser akan menjadi masalah besar.

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

Referensi yang hilang adalah masalah mendasar dengan Webpack. Menghapus pekerja sepenuhnya juga memperbaiki bug itu sebagai "kerusakan jaminan".

Mengenai mengapa seseorang menjalankan webpack pada kode terkait server: lingkungan tanpa server mungkin menjalankan Node versi lama sementara seseorang ingin dapat menggunakan sintaks modern seperti impor. (https://github.com/serverless-heaven/serverless-webpack)

@peterschussheim Saya melihat opsi lain selain menabrak versi untuk redis-parser di node-redis : install hiredis sendiri. Meskipun Anda mungkin tidak menggunakan hiredis , redis-parser mengharapkannya ada.

Sebenarnya, @BridgeAR : Ini bisa menjadi versi tambalan karena ini adalah perbaikan bug. Tapi ya, itu menjatuhkan versi Node di bawah 4, meskipun mereka telah menjadi EOL cukup lama.

@guidobouman Terima kasih banyak atas saran itu. Meskipun ini adalah 'retas', saya akan menerimanya karena saya tidak dapat membuang waktu lebih dari yang saya miliki karena masalah ini.

Mungkin ini adalah kesempatan yang baik bagi saya atau orang lain di komunitas untuk merilis versi 'modern' (sangat, sangat menyedihkan bahwa kami menunda perubahan seperti ini karena dukungan node 4).

👎.

Bisakah seseorang tolong jelaskan bagaimana cara memperbaiki masalah ini? Saya tidak mengerti mengapa saya masih perlu menambahkan hiredis sebagai ketergantungan langsung. Yang lain menyarankan untuk tidak menggunakan hiredis , jadi bagaimana saya harus melakukannya?
Dokumentasi mengatakan bahwa parser default bukan hiredis . Saya menggunakan versi terbaru dan hiredis masih diperlukan. Webpack gagal total saat memaketkan untuk runtime lambda AWS.

Setelah semua penyesuaian (ubah ke target: 'node' dan tambahan instal 'hiredis'), sepertinya masih ada
masalah dalam bundling. "Uncaught ReferenceError: memerlukan tidak ditentukan" muncul ketika saya mencoba menggunakan Redis dengan Webpack.

Masalah ini masih relevan, karena hireis terikat dan gagal dipasang di Node 12, redis-parser menghapusnya di v3.0.0 tetapi paket ini masih menggunakan v2.6.0.

Juga melihat ini ketika mencoba bundel dengan parceljs melalui:

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

Saya penasaran untuk melihat apa yang kami dapatkan saat bundling (penggoyangan pohon, pengoptimalan containerization, dll.). Minifikasi atau tidak, saya ingin melihat hasil ini jika berhasil. Kami akan tetap menggunakan npm install dan versi lengkapnya untuk saat ini.

Hiredis tidak ditinggalkan (PR terakhir adalah 10 hari yang lalu). Namun, saya akan menghibur PR @sookoll untuk pembaruan ke 3.0.

Hiredis tidak ditinggalkan (PR terakhir adalah 10 hari yang lalu). Namun, saya akan menghibur PR @sookoll untuk pembaruan ke 3.0.

Maaf, maksud saya hireis-node jelas. Tidak berpikir bahwa seseorang dapat berpikir keluar dari lingkungan simpul di sini.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat