如何在将错误隔离到每个文件的同时连接JS文件

How can I concatenate JS files while isolating errors to each file?

本文关键字:文件 JS 连接 错误 隔离      更新时间:2023-09-26

问题

我在运行时加载来自各种第三方开发人员的脚本(这个应用程序不是由我托管的,所以一旦运行,我就失去了对代码的控制),比如说a.js、b.js、c.js.

我想减少HTTP请求,所以我将它们作为一个大的串联文件abc.js 提供

我希望避免任何一个文件中的错误影响任何其他文件的执行。我怎样才能做到这一点?

非启动器

  • 尝试捕获

    Try-catch对语法错误没有帮助。语法错误将导致整个文件失败。它也会导致FunctionDeclarations出现问题,而FunctionDeclaration在Firefox中已从全局范围中删除。

  • 取消连接

    我需要减少请求。文件在传输过程中必须连接起来。

首选项

保持脚本的同步加载。

可能的解决方案

  • 将连接文件加载为文本,然后分别评估每个脚本。GMail Mobile使用了一种技术——http://googlecode.blogspot.com.au/2009/09/gmail-for-mobile-html5-series-reducing.html

任何预先存在/预打包的库都可以实现这一点,这对我来说是最好的解决方案

编辑:我的"应用程序";是现场安装的,并且在运行时可以使用来自第三方的任意JS进行插入。所以我从来没有在生产之外一起测试过所有的JS。

你不能这么做。如果是一个大的串联文件,语法错误就在一个大文件中。如果不连接文件,则会收到多个对单独文件的请求,但至少可以将错误定位到特定文件。这是没有办法的。

也就是说,除非文件被缩小,否则任何像样的浏览器,如Chrome、Safari、Firefox,都应该在开发者工具中显示错误所在。

你真的无法做到这一点(除非你建议将其加载为文本文件,然后对其进行评估,但老实说,这太可怕了)。

您可能应该做的是在开发过程中保持文件的分离,一旦对它们进行了测试,就可以在生产环境中连接它们。

花更多的钱购买更好的服务器/连接或在S3上托管您的应用程序;无论你在做什么,成本都可能比你的时间便宜。