2014-04-04 5 views
6

Ich versuche, Swig (die Vorlagensprache) Parse Cloud Code mit Express zu arbeiten. Parse Cloud Code ist ein Node/Express-Host, der NPM nicht zulässt. Lächerlich, ich weiß. Ich kann immer noch externe Dateien in den Code laden, die Anweisungen erfordern, aber ich denke, dass ich hoffe, dass ich das funktioniere.Verketten NPM-Paket in eine JS-Datei

Also meine Frage ist, wie bekomme ich das ganze ganze Swig Paket in eine einzige JS-Datei, die ich von meinem Parse Express App wie so kann sein:

var swig = require("./cloud/swig.js"); 

erwähnenswert, dass Parse bricht normale Aussagen erfordert so dass das NPM-Paket unverändert funktioniert, ohne jede einzelne Datei im Ordner "node_modules" so zu ändern, dass cloud in seinem Pfad enthalten ist (weshalb der obige Pfad cloud enthält). Parse drosselt auch beim Hochladen von vielen kleinen Dateien. Verkettung ist ein Bedürfnis auf dieser Plattform.

Ich habe versucht, stundenlang mit browserify zu spielen, aber keine Kombination von irgendetwas, was ich mache macht das Swig-Objekt verfügbar, wenn ich die browserifizierte Datei mit der require-Anweisung lade. Ich denke, dass es die richtige Option sein könnte, da die Browserified-Datei alle Dateien von Swig enthält, sie jedoch nicht extern verfügbar macht.

Meine Frage ist entweder kann dies in browserify getan werden, und wenn ja, wie? Oder gibt es eine andere Möglichkeit, einen NPM-Repo auf eine Datei zu verketten, damit er leichter von dieser Plattform eingebunden werden kann?

so vielen Dank.

+0

Vielleicht können Sie versuchen, die Browser-Version von swig zu verwenden. [swig.js] (http://paularmstrong.github.io/swig/js/swig.js), [swig.min.js] (http://paularmstrong.github.io/swig/js/swig.min .js) und [Dokument] (http://paularmstrong.github.io/swig/docs/browser/). – bnuhero

+0

Haben Sie versucht, [index.js] (https://github.com/paularmstrong/swig/blob/master/index.js) als BFy-Einstiegspunkt zu verwenden? Die Ausgabedatei - das sollten Sie in Ihrem ParseCloud-Projekt benötigen. – Zasz

+0

Hosting ändern? oder wenn es aus irgendeinem Grund keine Option ist, zip/unzip? browserify wird den Trick nicht machen - Sie brauchen eine Ordnerstruktur, keine einzige Datei. – esp

Antwort

0

Browserfy ist nicht das richtige Werkzeug für den Job.

Wie der Name schon sagt, soll browserify verwendet werden, um Dateien zu generieren, die Sie im Browser ausführen möchten. Es führt die Require-Aufrufe von einem Einstiegspunkt aus (d. H. Eine JS-Datei, die Sie an browserify übergeben) und bündelt sie in einem Objekt, das ihren Namen Funktionen zuordnet, die die Module umschließen. Es wird nicht erwartet, dass eine require-Funktion bereits existiert und sie nicht verwendet. Es ersetzt seine eigene Implementierung von , die nur eine Sache tut: Namen aus dem Bündel suchen, die passende Funktion ausführen und exports zurückgeben.

Sie könnten theoretisch require ein browserify Bundle, aber es würde nur ein leeres Objekt zurückgeben (obwohl es mit Globals verwirren könnte). Und wahrscheinlich wird es kaputt gehen, weil die gebündelten Module denken, dass sie in einem Browser ausgeführt werden. Das wird nichts nützen.

Die einzige vernünftige Option, wenn Sie mit dem Host bleiben möchten, ist über den node_modules Ordner aus Ihrem lokalen Projektordner zu kopieren. Dies funktioniert möglicherweise nicht, wenn Ihr Computer und der Server nicht 100% kompatibel sind (z. B. 32-Bit vs. 64-Bit, Debian vs RedHat, OSX/Windows vs. Linux), aber dies hängt hauptsächlich von Ihren genauen Abhängigkeiten ab node-gyp kann ein Problem sein).

Node.js verwendet den Ordner node_modules, wenn Abhängigkeiten in require automatisch abgefragt werden. Wenn Sie einen node_modules Ordner mit den richtigen Inhalten auf dem Server erhalten können, funktioniert require("foo") so lange, wie node_modules ein Modul foo enthält.

0

Letztlich Sie versuchen npm Module in Parse Cloud-Code zu verwenden, und es ist derzeit nicht möglich:

https://parse.com/questions/using-npm-modules-in-cloud-code

Aber wenn Sie versuchen, Swig zu verwenden, dann als Work-around, Sie kann stattdessen underscore template verwenden. Parse enthält bereits unterstreichen:

https://parse.com/docs/cloud_modules_guide#underscore

+0

Sie haben die Frage des Autors nicht gelesen, bevor Sie Ihre Antwort gepostet haben. Er hat festgestellt, dass er NPM in Parse Cloud nicht verwenden kann. Er versucht nicht, npm-Module zu verwenden. Er versucht, ein npm-Modul in einer einzigen Datei zu verketten, so dass er es möglicherweise benötigt. Benötigt eine Datei funktioniert. Scheitern. – FueledPublishing