Ich habe ziemlich viele Kollegen und Freunde mit bestehenden Brownfield, chaotischen Javascript-Anwendungen, die gerne mit der Umstellung auf ein js-Modulsystem beginnen würden. Ich habe versucht, ihnen in der Vergangenheit zu helfen, indem ich ihnen gezeigt habe, wie man sie reformiert, aber ich fange an zu denken, dass das ein schlechter Ansatz ist.
Das Problem ist normalerweise, dass die Natur ihres globalen All-over-the-Place-Codes mit der asynchronen Natur von AMD in Konflikt steht, und so sehr ich an den AMD-Ansatz glaube, haben sie größere Bedenken als meine Vorträge auf der "richtige" Art, Modul laden zu tun.
Browserify entfernt in der Zwischenzeit die Async-Betrachtung und ist einfacher, fügt aber einen ganzen Build-Schritt hinzu. Für Leute, die keine Bündelung oder irgendeinen anderen Build-Prozess verwenden (oder nur den Standard in einem Visual Studio), ist dies wiederum zu viel Overhead.
Was ich wirklich will, ist ein einfaches Modulsystem, das es den Leuten ermöglicht, define
und require
sachen zu machen. Dies ist ein halber Schritt, um Dinge richtig zu machen, sie können ihre Abhängigkeiten mit regulären Skript-Tags einschließen und sie manuell in das Modulsystem definieren. Ich habe sogar ein solches System geschrieben , weil ... hey, das ist wirklich einfach.
Heute hat mich jemand darauf hingewiesen, dass es möglich sein sollte, nur die clientseitigen Teile von Browserify zu verwenden, um dies zu erreichen. Ich stimme zu. Allerdings kann ich nirgendwo wirklich Dokumentation finden oder einfach nur die Client-seitigen Sachen isoliert betrachten.
Nachdem ich mich hinsetzte und eine erstellte browserify-Datei sezierte, bin ich zu dem Schluss gekommen, dass das, was ich machen möchte, nicht möglich ist.
Zum einen scheint browserify kein definierbares oder gar ein require-Schlüsselwort zu haben. Zum anderen werden die kombinierten Module geringfügig neu geschrieben, was zur Laufzeit sehr schwierig zu erreichen wäre.
Ich bin über einen dynamischen Modullader gelaufen, der gut mit Browserify funktioniert. Sie können es für die Entwicklung verwenden, um "require" global auf der Clientseite verfügbar zu machen. Funktioniert großartig.
Eine Lösung für Ihr Problem könnte sein:
Ich habe dies aufgrund verschiedener Quellkarten-Bugs in Browsern geschrieben, und zu viele / alternative, Konfigurationsmöglichkeiten in gulp / browserify / watchify.
Es hat einen Build-Schritt, aber es muss nur ausgeführt werden, wenn neue Abhängigkeiten vorhanden sind.
Ich empfehle diesen Ansatz nicht für die Produktion, aber es ist so viel einfacher in der Entwicklung.
Dies ist sehr neu und in nichts anderem als dem neuesten Chrome, Firefox, mit einigen Anpassungen getestet im generierten Skript denke ich, dass es auch in ie6 funktionieren wird.
Tags und Links javascript browserify client-side