如何在我们的mvc3 Web应用程序的prod版本中删除JS日志记录调用?

时间:2012-06-04 22:23:18

标签: javascript asp.net-mvc-3 bundling-and-minification

我们在MVC3 Web应用程序中的整个JS中都有很多对我们的日志记录方法(只包装console.log)的调用,我想在构建测试和生产时将它们从JavaScript中删除生成。

目前我们正在使用bundling and minification nuget package将我们的JS捆绑并缩小为一个大缩小文件,但我想让它删除对日志记录方法的调用。

我们确实有一种机制可以用空函数替换日志记录方法,因此它们不会在生产中做任何工作,但仍会调用它们并传入各种参数。除此之外,还有“大” “传递的字符串可以删除,减少文件大小。

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

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

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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

例如,构建一个可以捕获整个日志记录调用的正则表达式(对我而言)相当困难:

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

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