I read this article http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification and I just feel there's a lot of content missing from it.
I was developing on a project using unminified javascript files. However, this became an issue when I decided to publish my project to another server, where bundle.config hijacks my javascript files and does things I never knew that I needed to test on my development, and now my dev machine is throwing all kinds of javascript errors. So now, I'm here, reading up on what bundle.config does with min files.
After reading the article, I made the following assumptions:
If I set my project to debug mode, my project will get all javascript files that does not contain any "min.js" files.
if I set my project to release mode, my project will attempt to get all my min.js files, and if there are no min.js files, then the non-min files will be converted to a minified version.
Based on those two assumptions, turns out I was wrong. Switching to Release mode doesn't do anything with min files, it acts the same way as my Debug mode.
Secondly, going into the web.config and setting the following to false (previously true):
<compilation debug="false" />
takes all my files that are not minified and minifies them, ignoring any min files I have! I don't see anything about File.min.js, all I see is something like: "File?v=dw-fikdksdm..." which is fine, since this is considered a "bundle" and gets minified, but why can't I just see my mins loaded? and what happens if minification and bundling throws javascript errors? What would I have to do at this point? Can I prevent some javascript files from not being included in a bundle and/or minified?
Also I've noticed there are a couple of 403 errors that occur when tried to load up the javascript resources.
Can someone explain what's going on here and why this is goes against my original assumption?
Okay, here are a few things I discovered about this:
When in debug mode, and you check the web.config:
then all your javascripts will be preserved within the bundle virtual directory (they will not merge into a single file and they will not be minified).
When switching to release mode, then switch to:
so that all your javascript files within a bundle are minified and compiled into a single file, this reduces round trips to the network. Please note, one file is created for each bundle.
If you want to get the optimizations enabled regardless of whether or not you're in debug mode, then set BundleTable.EnableOptimizations = true, which forces the minification and bundling. If you leave this out of the code, then BundleConfig will look at the web.config instead.
and this is how you'd add in javascript files:
Couple notes:
403 errors will occur if you use "Content/css" as your virtual directory of where your bundle will appear, this needs to be changed to "bundles/css" and the 403 will go away like so (using razor):
@Styles.Render("~/bundles/css")
meaning if you have this in your code (notice where ~/bundle/css" is, this will be where your css files will go):
But if you want to continue on doing the minified javascript and you do not know which files is throwing the error, the following steps will help:
I wish there was better documentation of bundle.config at the time of this writing, but I found this entire experience to be severely disappointing.