簡體   English   中英

將NPM包連接成一個JS文件

[英]Concatenate NPM package into one JS file

我試圖讓Swig (模板語言)使用Express 解析Parse Cloud Code Parse Cloud Code是一個不允許NPM的Node / Express主機。 可笑,我知道。 我仍然可以將外部文件加載到帶有require語句的代碼中,所以我認為我希望我可以使用它。

所以我的問題是如何將整個Swig包整合到一個JS文件中,我可以從我的Parse Express應用程序中包含這樣的文件:

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

值得注意的是,Parse打破了正常的需要語句,因此如果不修改node_modules文件夾中的每個單獨文件以在其路徑中包含cloud ,則NPM包不能正常工作(這就是我上面的路徑中有cloud的原因)。 在上傳大量小文件時,Parse也會窒息。 在這個平台上需要連接。

我已經嘗試使用browserify幾個小時,但是當我使用require語句加載瀏覽器化文件時,沒有任何組合使得暴露Swig對象。 我認為它可能是正確的選項,因為Browserified文件包含Swig中的所有文件,但它不會在外部公開它們。

我的問題是,這可以在browserify中完成,如果是,如何? 或者是否有另一種方法將NPM存儲庫連接到一個文件,以便可以更容易地從此平台中包含它?

非常感謝。

Browserify不適合這項工作。

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

理論上你可以require一個browserify包,但它只會返回一個空對象(盡管它可能會混淆全局變量)。 而且很可能它會破壞,因為捆綁的模塊認為它們是在瀏覽器中執行的。 這沒有任何好處。

如果您想堅持使用主機,唯一合理的選擇是從本地項目文件夾復制node_modules文件夾。 如果您的計算機和服務器不是100%兼容(例如32位與64位,Debian與RedHat,OSX / Windows與Linux),這可能不起作用,但這主要取決於您的確切依賴性(基本上是任何構建的node-gyp可能是個問題)。

在自動查找require調用中的依賴項時,Node.js使用node_modules文件夾。 如果你能以某種方式獲得一個在服務器上具有正確內容的node_modules文件夾,只要node_modules包含一個模塊foorequire("foo")就會起作用。

最終,您嘗試在Parse Cloud代碼中使用npm模塊,目前無法實現:

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

但是,如果您只是嘗試使用Swig,那么作為解決方法,您可以考慮使用下划線模板 Parse已包含下划線:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM