![](/img/trans.png)
[英]Concatenate & minify directory of JS files into one JS file with Guard and UglifyJS
[英]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
包含一个模块foo
, require("foo")
就会起作用。
最终,您尝试在Parse Cloud代码中使用npm模块,目前无法实现:
https://parse.com/questions/using-npm-modules-in-cloud-code
但是,如果您只是尝试使用Swig,那么作为解决方法,您可以考虑使用下划线模板 。 Parse已包含下划线:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.