如何阻止ASP.NET Core 2.0 MVC压缩修改特定文件?
你遇到的问题大概率是带asp-fallback-*标签助手的CDN脚本,和你的bundleconfig.json配置产生了冲突——毕竟CDN的jQuery已经是minified版本,再被打包工具处理就容易出意外,而且标签助手本身已经帮你处理了回退逻辑,手动捆绑反而画蛇添足。
下面是具体的排查和解决步骤:
1. 立刻从bundle配置中排除CDN回退脚本
先打开你的bundleconfig.json,检查有没有把本地回退的~/js/jquery.min.js(或者CDN链接,不过CDN链接一般不会被误加)加入到任何bundle的inputFiles里。如果有,直接删掉它——因为标签助手已经会在CDN加载失败时自动加载这个本地文件,再打包进去会导致重复加载,二次压缩还可能破坏脚本结构。
举个正确的bundle配置示例:
[ { "outputFileName": "~/js/site.min.js", "inputFiles": [ "~/js/site.js", "~/js/custom-utils.js" // 不要在这里加jquery.min.js! ] } ]
如果你的bundle用了通配符(比如~/js/**/*.js),一定要加上排除规则,避免误包含已minified的脚本:
[ { "outputFileName": "~/js/site.min.js", "inputFiles": [ "~/js/**/*.js" ], "exclude": [ "~/js/jquery.min.js", "~/js/**/*.min.js" // 全局排除所有已压缩的脚本,一劳永逸 ] } ]
2. 验证标签助手的输出是否正常
在浏览器里打开页面,右键查看源码,看看生成的脚本标签是不是类似这样:
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha384-tsQFqpEReu7ZLhBV2VZlAu7zcOV+rXbYlF2cqB8txI/8aZajjp4Bqd+V6D5IgvKT" crossorigin="anonymous"></script> <script> window.jQuery||document.write('<script src="/js/jquery.min.js"><\/script>') </script>
如果这段代码被捆绑工具修改了,那说明你可能误开启了对视图文件(.cshtml)的压缩处理。这时候要去项目设置里关闭视图压缩,或者配置捆绑工具只处理静态脚本文件,不要碰.cshtml里的内容。
3. 检查捆绑工具的版本和压缩配置
ASP.NET Core 2.0对应的BundlerMinifier工具尽量选稳定版本,比如BundlerMinifier.Core v2.8.391,太高的版本可能和Core 2.0不兼容。
另外,调整压缩配置,避免过度优化导致的问题:
{ "outputFileName": "~/js/site.min.js", "inputFiles": [ "~/js/site.js" ], "minify": { "enabled": true, "renameLocals": false, // 关闭变量重命名,防止和第三方脚本冲突 "preserveComments": "none" } }
总结一下
核心原则就是:由标签助手处理的CDN及回退脚本,不要放到手动捆绑包里。标签助手已经帮你搞定了加载优先级和回退逻辑,重复打包只会导致重复加载、二次压缩损坏脚本等问题。
内容的提问来源于stack exchange,提问作者Coder6841

