将NPM包连接成一个JS文件

我试图让Swig (模板语言)与Express一起使用Parse Cloud Code 。 parsing云代码是不允许NPM的Node / Express主机。 可笑,我知道。 我仍然可以使用require声明将外部文件加载到代码中,所以我认为我希望能够使这个工作成为可能。

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

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

值得注意的是,Parse打破了正常的require语句,所以如果不修改node_modules文件夹中的每一个文件以在其path中具有cloud (这就是为什么我的上面的path具有cloud ),那么NPM软件包不工作。 在上传大量小文件的同时,还会parsing扼stream圈。 级联是这个平台上的一个需求。

我试着玩了几个小时的浏览器,但是我没有做任何事情的组合,当我用require语句加载browserified文件时,暴露了Swig对象。 我认为这可能是正确的select,因为Browserified文件包含Swig中的所有文件,但不会在外部公开它们。

我的问题是,这是否可以在browserify,如果是这样做,如何? 或者还有另外一种方法可以将NPM的repo连接到一个文件,这样就可以更容易地从这个平台中包含它吗?

非常感谢。

Browserify不是正确的工具。

顾名思义,browserify旨在用于生成要在浏览器中执行的文件。 它将来自入​​口点的require调用(即传递给browserify的一些JS文件)绑定到一个将其名称映射到封装模块的函数的对象中。 它不指望一个require函数已经存在,也不会使用它。 它用它自己的实现替代require只做一件事:从bundle中查找名字,执行匹配函数并返回它的exports

理论上你可能require一个browserify包,但是它只会返回一个空的对象(尽pipe它可能会混淆全局variables)。 很有可能会因为捆绑的模块认为它们正在浏览器中执行而崩溃。 这不会有什么好处。

如果你想坚持使用主机,唯一的select就是复制本地项目文件夹中的node_modules文件夹。 如果你的计算机和服务器不是100%兼容的(例如32位和64位,Debian和RedHat,OSX / Windows和Linux),这可能不起作用,但是这主要取决于你的确切的依赖关系node-gyp可能是一个问题)。

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

最终,你正试图在Parse Cloud代码中使用npm模块,目前这是不可能的:

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

但是,如果您只是试图使用Swig,那么作为解决scheme,您可以考虑使用下划线模板 。 parsing已包含下划线:

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