2017-05-12 2 views
3

Ich möchte ein Javascript-Modul in JavascriptCore (auf iOS) laden.Laden AMD Modul in JavaScriptCore

Ich hole den Text der Datei über eine normale HTTP-Anfrage auf der iOS-Seite. Also kann ich die gesamte Zeichenfolge in den JScontext einlesen.

Aber jetzt möchte ich dieses Modul laden, und im Idealfall alle anderen Abhängigkeiten auflösen, obwohl dies nicht unbedingt erforderlich ist.

Ich habe versucht mit requireJS für Knoten, aber es scheint viele Abhängigkeitsfehler zu haben, und vielleicht ist es ein bisschen veraltet.

Ich habe auch versucht zu stehlen, aber ich bin mir nicht sicher, ob das der richtige Weg ist. Ich habe das auch versucht. https://github.com/millermedeiros/nodefy

Im Wesentlichen möchte ich tun, was erfordern js tut im Browser, aber in einer reinen Javascript-Umgebung (kein Browser, kein Knoten).

Ich möchte auch alles bündeln unten mit browserify, und habe die Dinge so aussehen - RequireJS load string

Das Problem ist, wenn ich den Code browserify gehen, (erfordern, requirejs) der Prozess nicht mit unfound Abhängigkeiten ?

Kann mir jemand in die richtige Richtung zeigen?

Antwort

4

Die von Ihnen erwähnten Technologien sind nicht vollständig miteinander kompatibel. Betrachten Sie eine Zeile wie require('meow'). Mit browserify/webpack/etc ist die Datei, die geladen wird, node_modules/meow/main.js (abhängig davon, was package.json sagt, ist die Hauptdatei). In requirjs lädt diese Datei den Pfad /meow über den Browser oder aus dem baseUrl-Stammverzeichnis Ihres Projekts. Um dies zu überschreiben, fügen Sie Konfigurationsoptionen in requirejs hinzu. Das ist sehr peinlich, weil es dazu führt, dass Sie einen Eintrag für jedes Paket in node_modules erstellen. Kurz gesagt, Sie können requirejs und browserify nicht ohne viel Arbeit kombinieren.

Um die Code-Aufteilung mit browserify oder webpack einzurichten, müssen Sie einen neuen Einstiegspunkt für das Bundle definieren. Dann, wenn Sie es aus Ihrer Anwendung laden, müssen Sie das js-Bundle laden, indem Sie etwas wie fetch('https://myserver.com/bundle2.js').then()... tun. Es gibt eine Handvoll Werkzeuge, die Ihnen dabei helfen können, entweder mit webpack oder browserify.

  1. Einige Strategien mit Browserify - http://esa-matti.suuronen.org/blog/2013/04/15/asynchronous-module-loading-with-browserify/
  2. Webpack - https://webpack.github.io/docs/code-splitting.html

Die Geschichte des Web, um dieses im Augenblick nicht sehr gut ist (Stand 2017). Die meisten Systeme tun dies auf eine bestimmte Art und Weise.

+0

Danke für die Kommentare! Habe ich recht, dass du antwortest, dass ich in Bezug auf Javascriptcore meinen eigenen Async Loader schreiben muss? Ich interessiere mich hauptsächlich nur für JScore oder ein Android-Äquivalent, da requirejs im Moment für mich im Browser perfekt funktioniert. Ich lade derzeit dynamisch benutzerdefinierte Pfade für jedes Modul (so kann ich umleiten, dass die Module abhängig von der Umgebung auf verschiedenen Servern leben können) und es funktioniert gut. Würdest du etwas über den Aufbau deines eigenen Modul-Loaders wissen, und wie wäre das anders, als eval einfach eval zu verwenden? –

+0

Oh ja total. Sieh dir das an: https://github.com/parris/twitch_stream_search/blob/master/src/utils/simpleRequire.js#L24 Ich habe dort meinen eigenen Async-Modullader erstellt. Fühlen Sie sich frei, durch den Rest der Bibliothek zu lesen, um ein vollständigeres Bild zu erhalten.Dies ist im Grunde eine bedarfsähnliche Umgebung in nur wenigen Zeilen. JETZT ist ein anderes Problem möglicherweise, dass Sie Dateien nicht lokal mit dem Protokoll file: // laden können. Wenn Sie von einem Server laden, sollten Sie in Ordnung sein. Siehe diese SO Antwort: https://stackoverflow.com/questions/20829481/ajax-code-without-web-server – Parris