繁体   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