有没有人在 ASP.NET MVC 项目中捆绑和缩小模块化 JavaScript(如 RequireJS / AMD)有任何经验或知道任何好的解决方案?
是使用RequireJS 优化器的最佳方式吗(可能在构建后操作中?)——或者对于 ASP.NET MVC 有更好的方法吗?
有没有人在 ASP.NET MVC 项目中捆绑和缩小模块化 JavaScript(如 RequireJS / AMD)有任何经验或知道任何好的解决方案?
是使用RequireJS 优化器的最佳方式吗(可能在构建后操作中?)——或者对于 ASP.NET MVC 有更好的方法吗?
我认为你会遇到的问题是如果你使用匿名定义。如果您想要一个包含所有定义的组合/捆绑脚本文件,则必须命名它们。
例如。
define("someModule", ["jquery", "ko"], function($,ko) { ... });
代替
define(["jquery", "ko"], function($,ko) { ... });
如果您使用文件名作为模块名称,您将能够异步加载(未捆绑)以及预加载(捆绑)。这样您就可以在调试模式和发布模式下工作,而无需更改您的要求。
我没有使用 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>
至
<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>
我没看过,但如果捆绑配置可以确保 main.js 是最后一个,那么甚至不需要最后一个脚本标记。
这些是将 RequireJS 与 main.js 捆绑在一起的步骤。<head>
您可以在标签中减少一行。这并没有解决匿名定义的问题。
HTML
<head runat="server">
<title></title>
<%: System.Web.Optimization.Scripts.Render("~/bundles/scripts") %>
</head>
BundleConfig.cs
using System.Web;
using System.Web.Optimization;
public class BundleConfig
{
// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/scripts").Include(
"~/scripts/libs/require.js",
"~/scripts/main.js"));
}
}
main.js 必须在没有 data-main 的情况下工作(我需要设置 baseUrl)
require.config({
baseUrl: "scripts"
});
我不确定这是否是一个可接受的解决方案,但 Visual Studio 2012 有一个支持本机缩小和捆绑的 NuGet 包 (Microsoft.Web.Optimization)。我不确定它是否适用于 2010 年
这是 application_start 中的一行代码
Microsoft.Web.Optimization.BundleTable.Bundles.EnableDefaultBundles();
http://msdn.microsoft.com/en-us/vs11trainingcourse_aspnetandvisualstudio_topic5