将NPM包连接成一个JS文件

时间:2014-04-04 01:03:26

标签: javascript node.js npm parse-platform browserify

我正在尝试使用Express Swig(模板语言)处理Parse Cloud Code。 Parse Cloud Code是一个不允许NPM的Node / Express主机。可笑,我知道。我仍然可以将外部文件加载到带有require语句的代码中,所以我认为我希望能够使用它。

所以我的问题是如何将整个Swig包整合到一个JS文件中,我可以从我的Parse Express应用程序中包含这样的文件:

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

值得注意的是,Parse打破了正常的require语句,因此如果不修改node_modules文件夹中的每个文件在其路径中都有cloud,NPM包就不能正常工作(这就是为什么我的上面路径中有cloud)。在上传大量小文件时,Parse也会窒息。在这个平台上需要连接。

我尝试使用browserify几个小时,但是当我使用require语句加载浏览器化文件时,没有任何组合可以公开Swig对象。我认为它可能是正确的选项,因为Browserified文件包含Swig中的所有文件,但它不会在外部公开它们。

我的问题是,这可以在browserify中完成,如果是,如何?或者是否有另一种方法将NPM存储库连接到一个文件,以便可以更容易地从此平台中包含它?

非常感谢。

2 个答案:

答案 0 :(得分:0)

Browserify不适合这项工作。

顾名思义,browserify旨在用于生成要在浏览器中执行的文件。它从入口点(即您传递给浏览器的一些JS文件)遍历require调用,并将它们捆绑在一个对象中,该对象将其名称映射到包含模块的函数。它不期望require函数已经存在并且不会使用它。它替换了自己的require实现只做了一件事:从bundle中查找名称,执行匹配函数并返回其exports

理论上你可以require一个browserify包,但它只会返回一个空对象(尽管它可能会混淆全局变量)。而且很可能它会破坏,因为捆绑的模块认为它们是在浏览器中执行的。这没有任何好处。

如果您想坚持使用主机,唯一合理的选择是从本地项目文件夹复制node_modules文件夹。如果您的计算机和服务器不是100%兼容(例如32位与64位,Debian与RedHat,OSX / Windows与Linux),这可能不起作用,但这主要取决于您的确切依赖性(基本上是任何构建的node-gyp可能是个问题。)

在自动查找node_modules调用中的依赖项时,Node.js使用require文件夹。如果您能以某种方式获得包含服务器上正确内容的node_modules文件夹,只要require("foo")包含模块node_modulesfoo就会有效。

答案 1 :(得分:0)

最终,您尝试在Parse Cloud代码中使用npm模块,目前无法实现:

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

但是如果您只是尝试使用Swig,那么作为解决方法,您可以考虑使用underscore template。 Parse已包含下划线:

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