2016-03-18 3 views
3

Ich versuche Node-Postgres zu verwenden, um meine App mit Postgres zu verbinden. Der Code ich verwende, ist:Webpack kann __dirname nicht verwenden?

import React from 'react'; 
import pg from 'pg'; 
import fs from 'fs'; 
var cn = { 
    host: 'localhost', // server name or IP address; 
    port: 5432, 
    database: 'my_db', 
    user: 'myname', 
    password: 'mypass' 
}; 

und es erzeugt den Fehler:

index.js:5 Uncaught ReferenceError: __dirname is not defined 
up @ index.js:5 
__webpack_require__ @ bootstrap 539ecc7…:19 
(anonymous function) @ client.js:4 
__webpack_require__ @ bootstrap 539ecc7…:19 
(anonymous function) @ index.js:3 
console.EventEmitter._events @ index.js:81 
__webpack_require__ @ bootstrap 539ecc7…:19 
(anonymous function) @ app.js:26957 
__webpack_require__ @ bootstrap 539ecc7…:19 
content @ bootstrap 539ecc7…:39 
__webpack_require__ @ bootstrap 539ecc7…:19 
(anonymous function) @ bootstrap 539ecc7…:39 
(anonymous function) @ bootstrap 539ecc7…:39 
webpackUniversalModuleDefinition @ universalModuleDefinition:7 
(anonymous function) @ universalModuleDefinition:10 

Der Pfad auf index.js in der Konsole vorgesehen ist webpack: ///./~/pg/~/ pgpass/lib/index.js: 5

Ich versuchte @Renzo Poddighe Lösung bei how to write file with node webkit js?, aber ich bekomme immer noch den gleichen Fehler. Ich denke, es könnte etwas mit den Diskussionen unter https://github.com/nwjs/nw.js/wiki/Differences-of-JavaScript-contexts#resolving-relative-paths-to-other-scripts und https://github.com/nwjs/nw.js/issues/264 zu tun haben. Sie sagen, dass

// __dirname is not defined in webkit context, this is only node.js thing 
console.log(__dirname); // undefined 

und

__dirname arbeitet in Node.js Modulen, das heißt in JavaScript-Code, der mit require() aufgerufen wurde. __dirname funktioniert nicht nur in WebKit-Skripten, d. H. In JavaScript-Code, der mit HTML aufgerufen wurde, oder jQuery $ .getScript() oder einer anderen ähnlichen Methode.

Irgendwelche Ideen? Lassen Sie mich wissen, welche anderen Informationen ich hinzufügen muss.

bearbeiten

Ich glaube, mein Ziel ist

var config = { 
    entry: { app: './src/index.jsx'}, 
    output: { 
    libraryTarget: 'umd', 
    path: path.join(__dirname, 'dist'), 
    filename: '[name].js' 
    }, ... 

Mein webpack.config.js wie folgt aussieht:

... 
    node: { 
    console: true, 
    __dirname: true, 
    dns: 'empty', 
    fs: 'empty', 
    net: 'empty', 
    tls: 'empty' 
    } 
... 
+0

Was ist das Ziel Ihres Webpacks? web/node oder etwas anderes https://webpack.github.io/docs/configuration.html#target – thangngoc89

+0

Die einzige Sache mit 'target', die ich sehe, ist' libraryTarget: 'umd', '. Soll ich das explizit einstellen? Laut dem Link zu den Dokumenten sieht es so aus, als ob mein Ziel standardmäßig ein Web ist. – neallred

+0

Versuchen Sie 'target:' node' in webpack config zu spezifizieren –

Antwort

5

In diesem Fall fügen Sie diese zu Ihrer webpack config:

{ 
    node: { 
    __dirname: true 
    } 
} 

Dadurch wird webpack angewiesen, __dirname Instanzen durch den Pfad des Moduls zu ersetzen. Dieser Pfad relativ zu context

+0

Ich habe es hinzugefügt, aber ich bekomme immer noch den gleichen Fehler nach dem Neustart meines Webpack-Dev-Servers. Ich benutze auch Hot-Reloader, wenn das einen Unterschied macht. – neallred

+0

Gibt es einen Grund, warum Sie versuchen, 'fs' und' pg' in einer Webumgebung zu verwenden? Webpack hat für Knoten api, aber 'pg' gespiegelt, andererseits ist es ein Knotenpaket. Es könnte einige Knoten Api Underhood verwenden. – thangngoc89

+0

Ich gehe vielleicht in die falsche Richtung, aber ich möchte ein Webinterface für die Datenbank erstellen, damit ein nichttechnischer Administrator Einträge in der Datenbank hinzufügen, bearbeiten und löschen kann. Ich dachte, ich müsste pg mit einbeziehen. Ich habe fs eingebaut, um Fehler zu beheben und Fehler zu beheben. Wenn ich dns, fs, tls, net nicht einschließe, erhalte ich einen Fehler, wenn die Module nicht gefunden werden. – neallred