将NPM包拼接成一个JS文件

6
我正在尝试在Express上使用Swig(模板语言),并将其与Parse Cloud Code配合使用。Parse Cloud Code是一个Node / Express主机,不允许NPM。很荒谬,我知道。但是我仍然可以使用require语句将外部文件加载到代码中,因此我认为我有希望使其工作。
所以我的问题是,如何将整个Swig软件包打包成一个JS文件,以便我可以从我的Parse Express应用程序中进行包含,如下所示:
var swig = require("./cloud/swig.js");

值得注意的是,Parse破坏了常规的require语句,因此NPM包本身不能正常工作,需要修改node_modules文件夹中的每个文件,在其路径中加入cloud(这就是为什么我的上面的路径中有cloud)。在上传大量小文件时,Parse也会出现问题。在这个平台上,需要使用合并操作。
我尝试使用browserify进行多个小时的尝试,但我所做的任何组合都无法在加载带有require语句的browserified文件时公开Swig对象。我认为这可能是正确的选项,因为Browserified文件包括Swig的所有文件,但它们没有在外部公开。
我的问题是,这可以在browserify中完成吗?如果可以,如何完成?或者是否有另一种方法将NPM存储库合并为一个文件,以便更轻松地从此平台中包含?
非常感谢。

也许你可以尝试使用 swig 的浏览器版本。swig.jsswig.min.jsdocument - bnuhero
你尝试使用index.js作为BFy入口点了吗?输出文件 - 你应该能够在ParseCloud项目中要求它。 - Zasz
更改托管?或者如果由于某种原因不是选项,则进行压缩/解压缩?Browserify行不通-您需要文件夹结构,而不是单个文件。 - esp
2个回答

0

Browserify不是适合这项工作的正确工具。

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

理论上,您可以require browserify bundle,但它只会返回一个空对象(尽管它可能会干扰全局变量)。而且很可能会出错,因为捆绑的模块认为它们正在浏览器中执行。这对任何有益处。

如果你想继续使用主机,唯一明智的选择就是从本地项目文件夹复制 node_modules 文件夹。如果你的计算机和服务器不是完全兼容(例如32位与64位、Debian与RedHat、OSX/Windows与Linux),这可能无法正常工作,但这主要取决于你的确切依赖项(基本上任何使用 node-gyp 构建的东西都可能是一个问题)。

Node.js 在自动查找 require 调用中的依赖项时,使用 node_modules 文件夹。如果你可以在服务器上获取一个带有正确内容的 node_modules 文件夹,那么只要 node_modules 包含模块 foorequire("foo") 就能正常工作。


0

在发布你的答案之前,你没有仔细阅读作者的问题,因为他指出他无法在Parse Cloud中使用NPM。他并不是试图使用npm模块。他试图将一个npm模块连接成一个单独的文件,以便他可以要求它。要求一个文件是有效的。失败了。 - FueledPublishing

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接