如何在 mvc3 Web 应用程序的生产版本中删除 JS 日志记录调用

How to remove JS logging calls in our prod build of our mvc3 web app?

本文关键字:删除 版本 JS 日志 调用 记录 mvc3 Web 应用程序      更新时间:2023-09-26

我们在MVC3 Web应用程序中的整个JS中都对日志记录方法(只是包装控制台.log)进行了大量调用,我想在构建测试和生产版本时将它们从JavaScript中删除。

目前,我们正在使用捆绑和缩小 nuget 包将我们的 JS 捆绑和缩小到一个大的缩小文件中,但我也想让它删除对日志记录方法的调用。

我们确实有一种机制,用空函数替换日志记录方法,这样它们就不会在生产中做任何工作,但它们仍然被调用并传入各种参数。 最重要的是,有传递的"大"字符串,可以删除这些字符串,从而减小文件大小。

在我看来,理想的解决方案是以某种方式解析 JavaScript 并检测/删除对这些方法的调用。 最好是在某种JavaScript引擎中,而不仅仅是正则表达式。

无论哪种方式,我都只想在生产环境中提供的最终 JavaScript 中删除对日志记录方法的调用。 有谁知道我将如何完成这个额外的缩小?

是的,IBundleTransform 接口就是为这种情况设计的。 在RC位中,这是我们的设想:

new Bundle("~/bundles/js", new LogRemoverTransform(), new JsMinify());

基本上,你构造一个捆绑包并链接两个转换,首先剥离你的日志方法,然后运行正常的缩小。 在RC之前,您必须在IBundleTransform内进行合成。

您可以编写自己的 IBundleTransform 实现,该实现首先通过正则表达式删除对日志记录方法的调用,然后调用默认的捆绑和缩小功能。 只要您的通话相当简单,就应该不难想出。 不过,这可能会变得棘手,具体取决于您调用日志记录代码的方式。

例如,(对我来说)构建一个正则表达式来捕获整个日志记录调用是相当困难的,如下所示:

NS.log(function () { return "this is going to be hard to parse"; }());

但是,只要你不那样记录,它应该不是一个难以编写的正则表达式。