如何将多文件node.js应用程序转换为单个文件?

时间:2011-04-13 21:35:21

标签: javascript node.js

如果我有一个充满了许多require语句的node.js应用程序,我该如何将它编译成一个.js文件?我必须手动解析require语句并确保以正确的顺序加载类。是否有一些工具可以做到这一点?

让我澄清一下。

在node.js上运行的代码不是特定于节点的。 我正在做的事情没有直接的浏览器等效使用require,这就是我要问的原因。它没有使用任何节点库。

4 个答案:

答案 0 :(得分:8)

您可以将webpack与target:'node'一起使用,它将内联所有必需的模块并将所有内容导出为单个独立的一个文件nodejs模块

http://webpack.github.io/docs/configuration.html#target

答案 1 :(得分:3)

如果你想将公共代码发送到浏览器,我个人会推荐像brequirerequireJS这样的东西,可以“编译”你的nodeJS源,同时保持顺序异步加载代码。

对于一个实际的编译器到一个文件中你可能会得到一个for requireJS,但我不相信它具有高复杂性和边缘情况的大型项目。

将npm用于 state 的文件编写为像package.json这样的文件应该不会太难,文件应该在包装中出现。这样,您有责任确保所有内容都按正确顺序压缩,然后您可以编写一个简单的节点应用程序来读取您的package.json文件并使用文件IO来创建编译后的脚本。

自动生成应打包文件的顺序需要构建依赖关系树并进行大量文件解析。它应该是可能的,但它可能会崩溃循环依赖。我不知道有任何图书馆可以为你做这件事。

答案 2 :(得分:1)

NOT 如果您重视理智,请使用requireJS。我已经看到它用于一个大型项目,这是一场绝对的灾难......也许是该公司最糟糕的技术选择。 RequireJS旨在在浏览器中运行并异步运行并递归加载JS依赖项。这是一个可怕的想法。浏览器在通过网络加载大量小文件时很糟糕;关于网络效果的every single doc会告诉您这一点。因此,您很快就会需要一个解决方案来将您的JS文件粉碎在一起......此时,具有浏览器内依赖关系解析机制的重点是什么?即使你的生产站点被破坏成一个带有requireJS的JS文件,你的代码也必须经常假设任何依赖关系可能已加载,也可能没有加载;在一个复杂的项目中,这会导致成千上万的异步负载障碍包裹模块之间的每个交互点。在我上一家公司,我们有一些地方,封闭堆栈深达12级以上。所有这些"如果已加载"逻辑使您的代码更复杂,更难以使用。它还增加了代码,增加了发送到客户端的字节数。此外,客户端必须加载requireJS库本身,再烧掉14.4k。单独的大小应该告诉您有关requireJS项目中的特征蠕变级别的信息。为了进行比较,整个underscore.js工具包只有4k。

你想要的是一个编译时步骤,将JS粉碎在一起,而不是一个将在浏览器中运行的重量级框架....

您应该查看https://github.com/substack/node-browserify

Browserify完全符合您的要求....将多个NPM模块组合成一个JS文件,以便分发到浏览器。合并代码在功能上与原始代码相同,并且开销很低(每个附加文件大约4k + 140字节,包括" require(' file')" line)。如果你挑剔,你可以删除大部分4k,它提供包装器来模拟浏览器中常见的node.js全局变量(例如" process.nextTick()")。

答案 3 :(得分:0)

尝试以下方法:

  1. npm i -g @ vercel / ncc

  2. ncc构建app.ts -o dist

在此处查看详细信息https://stackoverflow.com/a/65317389/1979406