我们在MVC3 Web应用程序中的整个JS中都有很多对我们的日志记录方法(只包装console.log)的调用,我想在构建测试和生产时将它们从JavaScript中删除生成。
目前我们正在使用bundling and minification nuget package将我们的JS捆绑并缩小为一个大缩小文件,但我想让它删除对日志记录方法的调用。
我们确实有一种机制可以用空函数替换日志记录方法,因此它们不会在生产中做任何工作,但仍会调用它们并传入各种参数。除此之外,还有“大” “传递的字符串可以删除,减少文件大小。
在我看来,理想的解决方案是以某种方式解析JavaScript并检测/删除对这些方法的调用。优选地在某种JavaScript引擎中而不仅仅是正则表达式。
无论哪种方式,我只是希望在生产中提供的最终JavaScript中删除对我的日志记录方法的调用。有谁知道我如何完成这个额外的缩小?
答案 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"; }());
但是,只要你不那样记录,就不应该写一个困难的正则表达式。