当前位置: 首页 > 编程语言 > C#

使用MicrosoftWebOptimizationFramework时,不要对某些文件进行uglify分享

时间:2023-04-10 18:10:31 C#

使用MicrosoftWebOptimizationFramework时,不要对某些文件进行uglify我正在尝试使用MicrosoftWebOptimizationFramework对大量.js文件进行uglify连接成一个文件。一切正常,但在这些文件中,我有几个已经缩小和丑化了,不需要再次处理它们。例如,我有recaptcha_ajax.js文件,它在附加时导致以下错误:/*缩小失败。返回未缩小的内容。(715,29-36):运行时错误JS1019:循环外不能有'break':breakt(714,293-300):运行时错误JS1019:循环外不能有'break':breakt(678,210-217):run-timeerrorJS1019:Can'thave'break'outsideofloop:breakt(671,1367-1374):run-timeerrorJS1019:不能在循环外有'break'loop:breakt(665,280-287):run-timeerrorJS1019:Can'thave'break'outsideofloop:breakt*/我试图将recaptcha_ajax.js从包中拉出来并直接引用它,然后其他错误弹出-所以,我需要在特定位置的包中的那个文件。我只需要能够说-不要缩小和丑化recaptcha_ajax.js-只需将它添加到包中。有没有办法做到这一点?这是我的看法:varb=newScriptBundle("~/bundles/myjsbundle");b.IncludeDirectory("~/ScriptsMine/","*.js",true);//一些命令,例如://b.DoNotMinifyOrUglify("~/ScriptsMine/recaptcha_ajax.js");bundles.Add(b);Bundles使用IItemTransform的集合转换每个文件并连接结果。然后它使用IBundleTransform的集合转换结果。默认脚本包使用JsMinify(实现IBundleTransform)缩小完整的包内容。因此,为了防止某些文件缩小,您必须创建自己的IBundleBuilder,它使用IItemTransform按文件缩小捆绑文件。publicclassCustomScriptBundle:Bundle{publicCustomScriptBundle(stringvirtualPath):this(virtualPath,null){}publicCustomScriptBundle(stringvirtualPath,stringcdnPath):base(virtualPath,cdnPath,null){this.ConcatenationToken=";"+环境.NewLine;this.Builder=newCustomBundleBuilder();”"~/")).替换('\','/');}publicstringBuildBundleContent(Bundlebundle,BundleContextcontext,IEnumerablefiles){if(files==null)returnstring.Empty;如果(上下文==null)抛出新的ArgumentNullException(“上下文”);如果(bundle==null)抛出新的ArgumentNullException("bundle");StringBuilderstringBuilder=newStringBuilder();foreach(BundleFileb文件中的undleFile){bundleFile.Transforms.Add(newCustomJsMinify());stringBuilder.Append(bundleFile.ApplyTransforms());stringBuilder.Append(bundle.ConcatenationToken);}返回stringBuilder.ToString();}}publicclassCustomJsMinify:IItemTransform{publicstringProcess(stringincludedVirtualPath,stringinput){if(includedVirtualPath.EndsWith("min.js",StringComparison.OrdinalIgnoreCase)){返回输入;}Minifierminifier=newMinifier();varcodeSettings=newCodeSettings();codeSettings.EvalTreatment=EvalTreatment.MakeImmediateSafe;codeSettings.PreserveImportantComments=false;stringstr=minifier.MinifyJavaScript(input,codeSettings);如果(minifier.ErrorList.Count>0)return"/*"+string.Concat(minifier.Errors)+"*/";返回海峡;}}然后使用CustomScriptBundle而不是ScriptBundlepublicstaticvoidRegisterBundles(BundleCollectionbundles){bundles.Add(newCustomScriptBundle("~/bundles/Sample").Include("~/Scripts/a.js","~/Scripts/b.js","~/Scripts/c.js"));}如果你提供一个min.js文件,它将被使用而不是缩小。优化框架考虑文件名。尝试重构*.js文件名为recaptcha_ajax.min.js,如果我没看错,应该是跳过了uglify/minify过程,参考资料:http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification(向下滚动一点找到这个参考:)上面的代码创建了一个名为~/bundles/jquery的新JavaScript包,其中包含Scripts文件夹中的通配符字符串“~/Scripts/jquery-{version”所有对应的(即调试或缩小但不是.vsdoc)文件}.js文件”。对于ASP.NETMVC4,这意味着通过调试配置,文件jquery-1.7.1.js将被添加到包中。在发布配置中,将添加jquery-1.7.1.min.js。捆绑框架遵循几个常见的约定,例如:如果你在ScriptManager中捆绑一个.js文件,你会注意到脚本被加载进来而不是因此从捆绑中拉出它会将该文件加载到其他东西之前,它是如果它依赖于捆绑包中的其他东西,那就不好了。下面是一个需要按特定顺序添加到包中的库示例。这将添加到App_Start/BundleConfig.vb中'##########################################################'这是一个ScriptManager资源定义',用于ScriptManager映射'############################################################将ResourceDef调暗为ScriptResourceDefinition=NewScriptResourceDefinition()DimResourceNameasString="ColorBox"'添加资源定义细节ResourceDef.Path="~/Scripts/colorbox/jquery.colorbox-min.js"ResourceDef.DebugPath="~/Scripts/colorbox/jquery.colorbox.js"ScriptManager.ScriptResourceMapping.AddDefinition(ResourceName,ResourceDef)'############################################################请注意ResourceDef.Path和ResourceDef.DebugPath的使用。包含哪个文件取决于你是调试还是发布这里是我的ScriptManager包,注意ColorBox的位置,位置意义很多:以上是C#学习教程:使用MicrosoftWebOptimizationFramework时,不要丑化somefilestoshare全部内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: