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.
webpackの設定は次のとおりです。
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"
]
}
}
それはwebpackに関連している必要があります。 webpack configでnodeExternalsプラグインを使用することで、この問題を解決しました。
const nodeExternals = require('webpack-node-externals')
module.exports = {
...
externals: [nodeExternals()],
target: 'node'
}
nodeExternalsは、サーバー側のバンドルでnode_modulesフォルダー内のモジュールをスキップします。
これはwebpackの問題です。
実際、それはWebpackの問題ではありません。 これは、 redis-parser
がhiredis
をどのように使用したかに関する問題です。 この問題は、 redis-parser
3.0にアップグレードすることで解決できます。これにより、この問題が正確に解決されます。
@guidobouman node_redisをフォークしてその単一の依存関係をアップグレードせずにredis-parser
3.0を使用するにはどうすればよいですか? 私は何週間もこの問題の解決策を探していましたが、成功しませんでした。
@guidobouman Webpack
の場合、有効なJSコードで問題ありません。 そうではないようで、それは悲しいことです。 それはさておき、なぜ誰かがredisでWebpackを使いたがるのだろうかと思います。 サーバー側のコードを縮小することはかなり悪い考えです。
@peterschussheim現時点では、node_redisで作業する能力があまりありませんが、それはかなり悲しいことです。 ただし、redisパーサーのみをアップグレードすることは、重大な問題になります。
@BridgeARhttps ://github.com/NodeRedis/node-redis-parser/pull/36を参照してください
欠落している参照は、Webpackの根本的な問題でした。 Hiredisを削除すると、そのバグも「巻き添え被害」として完全に修正されました。
サーバー関連のコードでwebpackを実行する理由については、サーバーレス環境で古いバージョンのNodeを実行し、インポートなどの最新の構文を使用できるようにしたい場合があります。 (https://github.com/serverless-heaven/serverless-webpack)
@peterschussheim node-redis
のredis-parser
のバージョンをバンプする以外に、別のオプションがあります。自分hiredis
をインストールしてください。 おそらくhiredis
を使用していなくても、 redis-parser
はそれが存在することを期待しています。
実際、 @ BridgeAR :これはバグ修正であるため、パッチバージョンのバンプになる可能性があります。 しかし、はい、かなり長い間EOLであったにもかかわらず、ノードバージョンは4未満になります。
@guidoboumanその提案をありがとうございました。 それは「ハック」ですが、この問題のために私がすでに持っているよりも多くの時間を無駄にすることができないので、私はそれを受け入れます。
おそらく、これは私自身またはコミュニティの他の人にとって「最新の」バージョンをリリースする良い機会です(ノード4のサポートのために、このような変更を延期していることは非常に悲しいことです)。
👎
誰かがこの問題を修正する方法を説明できますか? 直接依存関係としてhiredis
を追加する必要がある理由がわかりません。 hiredis
を使用しないことを提案する人もいますが、どうすればそれを達成できますか?
ドキュメントによると、デフォルトのパーサーはhiredis
ではありません。 最新バージョンを使用していますが、 hiredis
はまだ必要です。 AWSラムダランタイムのバンドル時にWebpackが惨めに失敗します。
すべての調整(ターゲットへの変更:「ノード」と追加の「hiredis」のインストール)の後、まだあるようです
バンドルの問題。 WebpackでRedisを使用しようとすると、「Uncaught ReferenceError:require isnotdefined」が表示されます。
この問題は依然として関連しています。hiredisは結合されており、ノード12でのインストールに失敗したため、redis-parserはv3.0.0でそれを削除しますが、このパッケージは引き続きv2.6.0を使用します。
また、以下を介してparceljsとバンドルしようとしたときにこれが表示されます。
parcel build src/index.ts --bundle-node-modules --target node --no-source-maps --no-minify
バンドルすると何が得られるのか興味があります(ツリーの揺れ、コンテナ化の最適化など)。 縮小化の有無にかかわらず、これが機能した場合の結果を確認したいと思います。 今のところ、 npm install
とフルビルドを使用します。
Hiredisは放棄されていません(最後のPRは10日前でした)。 ただし、3.0へのアップデートのためにPR @ sookollを楽しませたいと思います。
Hiredisは放棄されていません(最後のPRは10日前でした)。 ただし、3.0へのアップデートのためにPR @ sookollを楽しませたいと思います。
申し訳ありませんが、私は明らかにhiredis-nodeを意味します。 ここで誰かがノード環境について考えることができるとは思いませんでした。
最も参考になるコメント
実際、それはWebpackの問題ではありません。 これは、
redis-parser
がhiredis
をどのように使用したかに関する問題です。 この問題は、redis-parser
3.0にアップグレードすることで解決できます。これにより、この問題が正確に解決されます。