使用ASP.NET MVC捆绑和缩小模块化JavaScript(RequireJS/AMD)

ken*_*eiv 33 javascript asp.net-mvc requirejs

有没有人有任何经验或知道在ASP.NET MVC项目中捆绑和缩小像RequireJS/AMD这样的模块化JavaScript的好解决方案?

是使用RequireJS优化器的最佳方式(也许是在后期构建操作中?) - 或者ASP.NET MVC有哪些更好的东西?

Jef*_*ler 13

我认为你遇到的问题是你使用匿名定义.如果您需要包含所有定义的组合/捆绑脚本文件,则必须为其命名.

例如.

define("someModule", ["jquery", "ko"], function($,ko) { ... });
Run Code Online (Sandbox Code Playgroud)

代替

define(["jquery", "ko"], function($,ko) { ... });
Run Code Online (Sandbox Code Playgroud)

如果使用文件名作为模块名称,则可以异步加载(非捆绑)以及预加载(捆绑).这样,您可以在调试模式和发布模式下工作,而无需更改您的要求.

我没有使用RequireJS优化器的经验来知道它是否负责匿名定义.

更新:

我最近不得不这样做,我遇到的一个问题是加载require.js的脚本标记的data-main属性.由于main.js文件对捆绑模块有依赖性,因此需要在main.js之前加载,但需要在require.js之后加载.所以我不得不抛弃data-main并最后加载该文件(非捆绑).

<script src="../JS/require-v2.1.2.js" type="text/javascript" data-main="main.js"></script>
Run Code Online (Sandbox Code Playgroud)

<script src="../JS/require-v2.1.2.js" type="text/javascript"></script>
<%: System.Web.Optimization.Scripts.Render("~/bundles/signup") %>
<script src="main.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

我没看过,但如果bundle配置可以确保main.js是最后一个,那么甚至不需要最后一个脚本标记.


McK*_*Kay 0

我不确定这是否是可接受的解决方案,但 Visual Studio 2012 有一个支持本机缩小和捆绑的 NuGet 包 (Microsoft.Web.Optimization)。不知道2010年能不能用

这是application_start中的一行代码

Microsoft.Web.Optimization.BundleTable.Bundles.EnableDefaultBundles();
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetandvisualstudio_topic5