Ich verwende Webpack, um meine es6 isomorphe react Anwendung in Client- bzw. Server-Bundles zu kompilieren. Ich habe Mungo installiert und versuche, es im Server-Teil meiner App zu verwenden, aber ich bekomme einige schreckliche Fehler in der Konsole, wenn ich baue:
WARNUNG in ./~/mongoose/lib/drivers/index.js Kritische Abhängigkeiten: 8: 11-74 die Anfrage einer Abhängigkeit ist ein Ausdruck @ ./~/mongoose/lib/drivers/index.js 8: 11-74
WARNUNG in ./~/mongoose/lib/drivers/SPEC.md Modul-Parser fehlgeschlagen: /Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/mongoose/lib/drivers/SPEC.md Zeile 2: Unerwartetes Token ILLEGAL Möglicherweise benötigen Sie einen entsprechenden Loader Behandle diesen Dateityp. | | # Treiberspezifikation | | MACHEN @ ./~/mongoose/lib/drivers ^. /. * $
WARNUNG in ./~/express/lib/view.js Kritische Abhängigkeiten: 78: 29-56 der Anfrage einer Abhängigkeit ist ein Ausdruck @ ./~/express/lib/view.js 78: 29-56
WARNUNG in ./~/es6-promise/dist/es6-promise.js Modul nicht gefunden: Fehler: Das Modul 'vertex' kann nicht in aufgelöst werden / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / es6-promise / dist lösche Modul vertex in / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / es6-promise / dist Suche nach Modulen in / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / src / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / src / vertex existiert nicht (Modul als Verzeichnis) lösche 'Datei' vertex in / Users / richie / Code / CreativeFlumeProjects / cf-website / src Datei auflösen / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / src / vertex existiert nicht /Users/richie/Code/CreativeFlumeProjects/cf-website/src/vertx.js existiert nicht nach Modulen in suchen / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertex existiert nicht (Modul als Verzeichnis) lösche 'Datei' vertex in / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules Datei auflösen / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertex existiert nicht /Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/vertx.js existiert nicht [/ Users / richie / Code / CreativeFlumeProjekte / cf-website / src / vertex] [/ Users / richie / Code / CreativeFlumeProjekte / cf-website / src / vertex] [/Users/richie/Code/CreativeFlumeProjects/cf-website/src/vertx.js] [/ Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertex] [/ Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / vertex] [/Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/vertx.js] @ ./~/es6-promise/dist/es6-promise.js 132: 20-30
WARNUNG in ./~/bson/lib/bson/index.js Kritische Abhängigkeiten: 20: 16-29 die Anfrage einer Abhängigkeit ist ein Ausdruck 44: 18-31 die Anfrage von a Abhängigkeit ist ein Ausdruck 71: 19-32 die Anforderung einer Abhängigkeit ist ein Ausdruck @ ./~/bson/lib/bson/index.js 20: 16-29 44: 18-31 71: 19-32
WARNUNG in ./~/require_optional/index.js Kritische Abhängigkeiten: 63: 18-42 die Anfrage einer Abhängigkeit ist ein Ausdruck 71: 20-44 der Anfrage einer Abhängigkeit ist ein Ausdruck 78: 35-67 die Anfrage von a Abhängigkeit ist ein Ausdruck @ ./~/require_optional/index.js 63: 18-42 71: 20-44 78: 35-67
WARNING in ./~/require_optional/README.md Fehler beim Parsen des Moduls: /Users/richie/Code/CreativeFlumeProjects/cf-website/node_modules/require_optional/README.md Zeile 1: Unerwartetes Token ILLEGAL Sie benötigen möglicherweise einen geeigneten Loader für Behandle diesen Dateityp. | # require_optional | Arbeite um das Problem herum dass wir kein optionales PeerDependencies-Konzept in node.js haben macht es zu einem Aufwand, optional native Module zu integrieren | @ ./~/require_optional ^. /. * $
WARNUNG in ./~/require_optional/LICENSE Modulparse fehlgeschlagen: / Benutzer / richie / Code / CreativeFlumeProjects / cf-website / node_modules / require_optional / LIZENZ Zeile 1: Unerwartete Kennung Möglicherweise benötigen Sie einen geeigneten Loader für Behandle diesen Dateityp. | Apache Lizenz | Version 2.0, Januar 2004
Ссылка @ ./~/require_optional ^. /. * $ /Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900 Rückkehrkarte [req] || (function () {neuen Fehler werfen ("Kann Modul nicht finden '"+ req +"'. ")} ()); ^Fehler: Kann das Modul './node-mongodb-native' nicht finden. at /Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900:42 bei webpackContextResolve (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235900:90) bei webpackContext (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235897:30) bei Objekt.(/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:48684:37) bei webpack_require (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:20:30) bei Objekt. (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:52685:17) bei webpack_require (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:20:30) bei Objekt. (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:236259:15) bei webpack_require (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:20:30) an Object.exports.contain.exxports.reachTemplate.internals.Any.applyFunctionToChildren.internals.Err.toString.internals.getPath.internals.serializer.internals.annotate.internals.Response._prepare.internals.Response._processPrepare.internals.Auth .test.internals.Auth.payload.internals.Auth.response.internals.Authenticator.exports.wrap.internals.isIsoDate.internals.compare.internals.Date.min.internals.Date.max.internals.Connection._init.internals .Connection._start.internals.Connection._stop.internals.Connection._dispatch.internals.Methods._add.internals.state.internals.payload.internals.compare.internals.Number.min.internals.Number.max.internals.Number .greater.internals.Number.less.internals.Number.multiple.internals.Number.integer.internals.Number.negative.internals.Number.positive.internals.Object.length.internals.Object.min.internals.Object.max .internals.Object.assert.internals.compare.internals.String.min.internals.String.max.internals.String.creditCard.internals.String.length.internal s.String.regex.internals.String.alphanum.internals.String.token.internals.String.email.internals.String.ip.internals.String.uri.internals.String.isoDate.internals.String.guid.internals. String.hex.internals.String.hostname.internals.String.lowercase.internals.String.uppercase.internals.Request.internals.Response.writeHead.internals.Topo.add.exports.execute.internals.prerequisites.internals.handler. internals.fromString.internals.pre.module.exports.internals.Plugin.internals.Plugin.register.internals.Protect.run.internals.Request.internals.Request._execute.internals.Request._lifecycle.internals.Request._invoke. internals.Server.start.internals.Server.initialize.internals.Server._start.internals.Server.stop._invoke.exports.send.internals.marshal.internals.fail.internals.transit.internals.state.internals.input. exports.response.internals.Router.normalize.internals.parseParams.internals.Router.table.internals.Policy.get.internals.Policy._callGenerateFunc.internals.Policy.set.exports.generateK ey.exports.encrypt.exports.decrypt.exports.hmacWithPassword.exports.seal.exports.unseal.internals.Array.items.internals.Array.ordered.internals.Array.min.internals.Array.max.internals.Array. length.internals.Binary.min.internals.Binary.max.internals.checkIpV6.exports.validate.internals.validate.internals.Definitions.parse.Items.serial.internals.unsign.Items.serial.internals.unign.internals. decode.internals.Definitions.format.Items.serial.exports.prepareValue.internals.encode.internals.sign.internals.Parser.internals.Parser.parse.decoder.once.writeFile.internals.Parser.raw.decoder.once. internals.Parser.multipart.onPart.writeFile.exports.Dispenser.internals.Dispenser.internals.Client.request.internals.Client.read.internals.Client.parseCacheControl.internals.Client._shortcut.map ../ connection (/Users/richie/Code/CreativeFlumeProjects/cf-website/public/server.bundle.js:235702:19)
Ich habe eine Reihe von Lösungen ausprobiert, die über Google gefunden wurden. Hinzufügen von ".node" zu meinen resolve.extensions, Hinzufügen von Node-Loader sowie einige zusätzliche Konfigurationen zum Node-Objekt, alles ohne Erfolg.
Ihre Webpack-Konfiguration, die den Servercode verarbeitet, sollte einige Extras enthalten, um Probleme zu vermeiden.
Fügen Sie Folgendes hinzu:
%Vor% Wenn Sie target
auf node
einstellen, wird dem webpack bewusst, dass Sie in einem Knotenkontext und nicht in einem Browser arbeiten. Durch das Hinzufügen von libraryTarget: 'commonjs'
wird das Webpack dazu gebracht, einfache require
Aufrufe zu verwenden, um Funktionen von externen Bibliotheken zu erhalten.
Dann passiert eine wichtige Sache in der Regex in externals
. Es schließt grundsätzlich aus, dass ein nicht-relativer Pfad vom Bundle benötigt wird. Wenn du import 'react';
machst, wird es nicht von webpack gepackt, aber wenn du import './components/MyComponent.js';
machst, wird es.
Das bedeutet auch, dass Sie sicherstellen müssen, dass Ihr node_modules
-Verzeichnis in Ihrem eingebauten Server-Code enthalten ist.
Warum all das? Weil Node viele native Module verwendet, die nicht richtig gebündelt werden können. Sie sind spezifisch für Ihre genaue Version von Node in Ihrem spezifischen Betriebssystem und Sie können diese nicht einfach in ein Javascript-Bundle ziehen. Sie möchten, dass Ihr eigener Code durch das Webpack geht und alle Sachen von node_modules
, auf die Sie gerade zugreifen können, wie jedes Knotenprojekt.
Wenn Sie nun diese Warnungen / Fehler in Ihrem Browserpaket erhalten, bedeutet das, dass Sie wahrscheinlich Module benötigen / importieren, die nur auf dem Server in Ihrem Browserpaket funktionieren. Stellen Sie sicher, dass Sie sie nur in Dateien benötigen, die nur auf dem Server verwendet werden. Alternativ dazu, sie selektiv zu verlangen. Wie Sie basierend auf dem Build-Typ selektive Anforderungen treffen können, finden Sie hier: Kann ich feststellen, ob mein Skript von Webpack verarbeitet wird?