2014-04-04 39 views
6

我試圖使用Express在Parse Cloud Code上運行Swig(模板語言)。解析雲代碼是不允許NPM的Node/Express主機。可笑,我知道。然而,我仍然可以將外部文件加載到需要語句的代碼中,所以我認爲我希望能夠實現這一目標。將NPM軟件包連接成一個JS文件

所以我的問題是如何得到了整個整個痛飲封裝成一個單一的JS文件,我可以包括從我的解析快速的應用程序,像這樣:

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

值得一提的是,解析打破正常需要語句,以便如果不修改node_modules文件夾中的每個文件以使其路徑中有cloud(這就是爲什麼我的上面的路徑中有cloud),那麼NPM程序包不工作。在上傳大量小文件的同時解析也會導致窒息。連接是這個平臺上的需要。

我試着玩了幾個小時的browserify,但是沒有任何組合讓我在使用require語句加載browserified文件時暴露Swig對象。我認爲這可能是正確的選擇,因爲Browserified文件包含Swig的所有文件,但它不會在外部公開它們。

我的問題是要麼可以在browserify中完成,如果是這樣,如何?或者還有另一種方法可以將NPM回購合併爲一個文件,因此可以更容易地從該平臺中包含該文件?

非常感謝。

+0

也許你可以嘗試使用痛飲的瀏覽器版本。 [swig.js](http://paularmstrong.github.io/swig/js/swig.js),[swig.min.js](http://paularmstrong.github.io/swig/js/swig.min .js)和[document](http://paularmstrong.github.io/swig/docs/browser/)。 – bnuhero

+0

您是否嘗試使用[index.js](https://github.com/paularmstrong/swig/blob/master/index.js)作爲您的BFy入口點?輸出文件 - 你應該可以在你的ParseCloud項目中要求。 – Zasz

+0

更改託管?或者如果它不是出於任何原因的選項,zip/unzip? browserify不會訣竅 - 你需要文件夾結構,而不是單個文件。 – esp

回答

0

Browserify不適合工作。顧名思義,browserify旨在用於生成要在瀏覽器中執行的文件。它遍歷來自入口點的require調用(即傳遞給browserify的某個JS文件),並將它們捆綁到一個將其名稱映射到包裝模塊的函數中的對象。它不指望require函數已經存在,並沒有使用它。它用它自己的require的實現替代它只做一件事:從包中查找名稱,執行匹配函數並返回它的exports

理論上你可以用require作爲一個browserify包,但它只是返回一個空對象(儘管它可能與全局變量混淆)。很有可能它會因爲捆綁的模塊認爲它們正在瀏覽器中執行而崩潰。這不會有任何好處。

如果您想堅持使用主機,唯一的理智選擇是複製本地項目文件夾中的node_modules文件夾。如果您的計算機和服務器不是100%兼容的(例如32位與64位,Debian與RedHat,OSX/Windows與Linux),這可能無法正常工作,但這主要取決於您的確切依賴關係(基本上取決於node-gyp可能是一個問題)。

Node.js使用node_modules文件夾查找依賴關係時require自動調用。如果您可以以某種方式獲得node_modules文件夾與服務器上的正確內容,require("foo")將工作,只要node_modules包含模塊foo

0

最後,你要使用的解析雲代碼NPM模塊,目前這是不可能的:

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

但如果你只是想使用痛飲,那麼作爲變通,你可以考慮使用underscore template代替。解析已經包括強調:

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

+0

您在發佈您的答案之前未能閱讀作者的問題,因爲他指出他無法在Parse Cloud中使用NPM。他不想使用npm模塊。他試圖將一個npm模塊連接成一個文件,以便他可能需要它。要求文件能夠工作。失敗。 – FueledPublishing