根据您的意见,我们需要讨论如何Bundling
机制在 MVC 中工作。
Edit:基于下面的评论VSDev,你需要确保网络润滑脂已安装到您的项目中。NuGet最简单的方法是安装这个软件包。
当您设置捆绑配置时(上面不是示例来说明)
bundles.Add(new ScriptBundle("~/bundles/mainJs")
.Include("~/Scripts/mainSite.js")
.Include("~/Scripts/helperStuff.js"));
然后,按照您的观点,您可以调用类似的东西@Scripts.Render("~/bundles/mainJs")
。当你的 web.config 设置为调试编译时OR您可以使用以下行明确关闭捆绑BundleConfig.cs
file
BundleTable.EnableOptimizations = false;
然后,在您的视图中,您将看到以下渲染结果
<script src="/Scripts/mainSite.js" type="text/javascript"></script>
<script src="/Scripts/helperStuff.js" type="text/javascript"></script>
这些是构成我们捆绑包的各个项目,未压缩并单独列出。这些在调试模式下单独列出的原因是,您可以调试脚本并在编写脚本时查看它们(实际变量名称等)。
现在,当我们没有处于调试编译状态并且没有关闭EnableOptimizations
功能,MVC 会将这些文件合并到我们的包中,压缩(缩小)它们并仅输出一个脚本标签。
<script src="/bundles/mainJs?v=someBigLongNumber" type="text/javascript"></script>
请注意,源与捆绑包配置中的捆绑包名称相同。另外,后面的数字?v=
每当您更改该捆绑包中的文件时,该文件都会更改。这是为了帮助防止客户端浏览器缓存旧的 js 和 css 文件。
您的脚本仍然存在并正在输出,但它们被压缩并组合成一个名为/bundles/mainJs
。此功能呈现给
A)压缩文件并减少传输的信息,
B)减少为检索呈现页面所需的内容而调用网站的次数。
没有丢失任何东西,听起来一切都按预期进行。在生产站点中,缩小使这些文件几乎无法读取,因此缩小在调试时不会生效。
至于为什么 jQuery UI 仍然是单个 JS 文件,请确保有人没有将其硬编码到您的布局视图中。至于 JS 错误,可能是您的开发盒上存在错误,或者可能是某些内容未正确压缩(但是,在我的所有 MVC 开发中,我没有看到由于缩小不当而导致的 JS 错误)。