Beim Erstellen mit Webpack wird folgende Fehlermeldung angezeigt:
ERROR in ./~/redis/lib/parser/hiredis.js
Module not found: Error: Cannot resolve module 'hiredis' in C:\NodeServer\AppInTheWild\node_modules\redis\lib\parser
@ ./~/redis/lib/parser/hiredis.js 3:14-32
Ich möchte Hiredis nicht als Abhängigkeit installieren. Welche Lösung habe ich?
Das Webpack erkennt anscheinend nicht, dass Hiredis eine optionale Abhängigkeit von node_redis ist.
Wie ist Ihre Webpack-Konfiguration? Ich habe einen interessanten Artikel gefunden, der zeigt, wie Sie nur Ihren eigenen Code verpacken und alles in node_modules
wie es ist. Auf diese Weise ziehen Sie keine Module von Drittanbietern ein und packen sie in Ihre endgültige Build-Datei. Es sei denn, Sie versuchen dies natürlich.
Schließen Sie dies, da es keine weitere Antwort gab und es kein Problem mit Node-Redis gibt
Ich habe das gleiche Problem; Webpack scheint nur mit node_redis zu scheitern (ich verwende webpack erfolgreich, um den Rest meines Backends mit webpack-node-externals zu packen, um node_module deps zu überspringen).
~~~~
FEHLER in ./~/redis-commands/index.js
Modul nicht gefunden: Fehler: 'Datei' oder 'Verzeichnis' ./Befehle in demo / node_modules / redis-Befehlen können nicht aufgelöst werden
@ ./~/redis-commands/index.js 3: 15-36
FEHLER in ./~/redis-parser/lib/hiredis.js
Modul nicht gefunden: Fehler: Das Modul 'sharedis' in demo / node_modules / redis-parser / lib kann nicht aufgelöst werden
@ ./~/redis-parser/lib/hiredis.js 3: 14-32
~~~~
@blainsmith meine Konfiguration hier:
~~~~
const nodeExternals = require ('webpack-node-externals');
module.exports = {
Ziel: 'Knoten',
externals: [nodeExternals ()],
Entschlossenheit: {
Erweiterungen: ['', '.js'],
modulesDirectories: [
'node_modules'
]]
},
Modul: {
resolveLoader: {
root: path.join (__ dirname, 'node_modules')
},
Lader: [
{
Test: /.json$/,
Lader: 'json-loader'
},
{
Test: /.js$/,
ausschließen: [/ node_modules /],
Lader: 'Babel-Lader'
},
]]
},
});
~~~~
Das Gleiche hier erleben. Andere Abhängigkeiten werden aufgelöst.
Das Dev-Skript funktioniert, das Build: Dev- Skript schlägt fehl. Gleiche webpack.config.js.
Skripte
"dev": "DEBUG=* && webpack-dev-server --bail --config webpack.config.js --host 0.0.0.0",
"build:dev": "webpack --config webpack.config.js ",
Deps
"botkit-storage-redis": "1.1.0",
Build-Fehler
ERROR in ./~/redis-parser/lib/hiredis.js
Module not found: Error: Can't resolve 'hiredis' in '/path/to/node_modules/redis-parser/lib'
@ ./~/redis-parser/lib/hiredis.js 3:14-32
@ ./~/redis-parser/lib/parser.js
@ ./~/redis-parser/index.js
@ ./~/redis/index.js
@ ./~/botkit-storage-redis/src/index.js
@ ./~/botkit-storage-redis/index.js
@ ./src/index.js
Hatte den gleichen Fehler und funktionierte, indem ich die Lösung von hier auslieh .
Das relevante Snippet in webpack.config.js
sieht also so aus:
resolve: {
alias: {
'hiredis': path.join(__dirname, 'aliases/hiredis.js')
}
}
Außerdem habe ich die Datei aliases/hiredis.js
, die folgenden Inhalt hat:
export default null
yarn add hiredis
npm i --save hiredis
Einfache Lösung ohne Hack
Da Hiredis eine optionale Abhängigkeit ist und ich keine unnötigen Abhängigkeiten installieren möchte, aber auch keine Aliase hacken möchte, ist die einfachste Lösung die Verwendung von webpack.IgnorePlugin ().
Zu webpack.config.js hinzufügen
plugins: [
new webpack.IgnorePlugin(/^hiredis$/)
],
Hilfreichster Kommentar
Hatte den gleichen Fehler und funktionierte, indem ich die Lösung von hier auslieh .
Das relevante Snippet in
webpack.config.js
sieht also so aus:Außerdem habe ich die Datei
aliases/hiredis.js
, die folgenden Inhalt hat: