Frage

Ich habe eine Bibliothek, die ich sowohl auf der Client- als auch auf der Serverseite verwenden möchte.Allerdings, weil request ist nicht mit browserify kompatibel. Beim Kompilieren mit browserify muss ich eine andere Bibliothek namens verwenden browser-request

if (inNodejsRuntime) {
  var request = require('request');
} else if (isBrowserifyRuntime) {
  var request = require('browser-request');
}

Wie erkenne ich, wann die Browserifizierung ausgeführt wird und wann sie sich innerhalb des Knotens befindet?

War es hilfreich?

Lösung

Wenn Sie nur einen einfachen Modulaustausch mit kompatiblen APIs durchführen, sollten Sie die verwenden Browserfeld in package.json.Also für Ihr Beispiel, tun Sie es einfach

var request = require('request')

wie zuvor und dann in die package.json einfügen:

{
  "browser": {
    "request": "browser-request"
  }
}

Auf diese Weise erhalten Sie im Browser eine Browser-Anfrage statt einer Anfrage, wenn Sie require('request').

Was du sollte nicht Sie benötigen beide Module mit einer Laufzeitprüfung auf deren Vorhandensein window oder eine ähnliche Immobilie.Dies liegt daran, dass Sie „browser-request“ UND „request“ in Ihrem Frontend-Code gebündelt erhalten, selbst wenn Sie tatsächlich nur „browser-request“ verwenden, was zu einer unnötig überhöhten Dateigröße führt.

Andere Tipps

Die akzeptierte Antwort ist richtig.Wenn Sie jedoch durch Googeln nach „browserify erkennen“ hierher gekommen sind und eine allgemeinere Antwort wünschen, transformiert browserify automatisch die vom Knoten bereitgestellte globale Antwort process.Sie können Folgendes verwenden:

process.browser

was sein wird true im Browser, undefined im Knoten.

Ich habe die Antwort gefunden:

if (typeof window === 'undefined') {
  var request = require('request');
} else {
  var request = require('browser-request');
}

Superagent scheint auch eine sehr gute Alternative zu sein!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top