TLDR; Meine Frage ist: Gibt es eine Möglichkeit, browserify nicht require
mit einer eigenen Implementierung zu überschreiben, und stattdessen verwenden Sie einen anderen Methodennamen (z. B. browserifyRequire
) für alle eigenen internen erfordern. Um herauszufinden, warum ich dies tun müssen, lesen Sie bitte weiter ...Paketcode für CasperJS + SlimerJS mit Browserify?
Das Szenario
Ich versuche, einige automatisierte Tests mit CasperJS zu schreiben und sie in SlimerJS läuft - in Bezug auf die Standard PhantomJS gegen (obwohl ich nach allem, was ich weiß, auf die gleichen Probleme mit PhantomJS stoßen würde).
ich wirklich möchte herausfinden, wie man diese in CoffeeScript schreibt. Wie sich herausstellt, sind CasperJS oder SlimerJS mit CoffeeScript heutzutage nicht gut. Die Empfehlung der Dokumentation besteht darin, zu JS vor laufendem Casper zu kompilieren. Ok ... nicht super praktisch, aber ich kann damit umgehen. In der Tat, ich finde auch heraus, dass die Art und Weise require
Pfade in diesen Tools zu lösen ist nicht so einfach wie in Node, so Bündelung vor dem Ausführen sollte auch dabei helfen.
Aber jetzt stoße ich auf eine neue Reihe von Problemen, wenn ich versuche, den gebündelten Code auszuführen. Ich verwende Browserify dafür.
Das Problem
In meinem Test-Code, muss ich require('casper')
. Standard Praxis in der CasperJS Welt. Also musste ich browserify sagen, dass ich CasperJS nicht bündeln soll, indem ich "browser": { "casper": false }
in meine package.json
setze. Bis jetzt keine Probs. Aber das Problem kommt als nächstes:
Browserify überschreibt die eingebaute require
-Funktion und liefert seine eigene Implementierung von require
, die all die Dinge macht, die browserify funktionieren lassen. CasperJS ist damit einverstanden, bis es die Richtlinie require('casper')
trifft. Das ist das einzige Mal, dass CasperJS das require
inging, nicht browserifizieren muss. Und das scheitert.
Die unvollständige Lösung
Ich bin mir ziemlich sicher, dass CasperJS einfach nicht mit der Tatsache, dass Browserify require
Vorrang umgehen kann, weil CasperJS seine eigene Art und Weise require
ing implementiert. Um diese Hypothese zu testen, habe ich das resultierende Bündel manuell bearbeitet und jedes Auftreten von require
in browserifyRequire
umbenannt - einschließlich der Implementierung von browserify von require
. Der einzige require
, den ich unverändert gelassen habe, war der Anruf an require('casper')
, denn das ist das eine Mal, dass ich CasperJS brauche, um die require
ing zu behandeln. Und tatsächlich hat dies die Dinge wie erwartet funktionieren lassen.
Die Frage
Wieder ist es eine Möglichkeit, browserify Verwendung einen anderen Namen für seine eigene interne require
zu machen? Ich denke, ich kann ein Skript schreiben, um diese Änderung nach der Bündelung zu machen, aber ich würde viel lieber herausfinden, wie man das über Config macht.
Eine Alternative Frage
Vielleicht statt Browserify es eine andere Lösung ist für die Bündelung und Coffeescript innerhalb CasperJS läuft? Ich habe noch keinen gefunden ....