簡體   English   中英

使用ASP.NET MVC捆綁和縮小模塊化JavaScript(RequireJS / AMD)

[英]Bundling and minifying modular JavaScript (RequireJS / AMD) with ASP.NET MVC

有沒有人有任何經驗或知道在ASP.NET MVC項目中捆綁和縮小像RequireJS / AMD這樣的模塊化JavaScript的好解決方案?

是使用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>

我沒看過,但如果bundle配置可以確保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

我知道這是一個老問題,但你可以看看RequireJS.NET Compressor(使用YUI壓縮器,而不是ASP.NET捆綁 - 至少目前),這是RequireJS.NET NuGet包的一部分。

參考文獻:

Compressor - http://requirejsnet.veritech.io/compressor.html

一般文檔 - http://requirejsnet.veritech.io/

Github項目 - https://github.com/vtfuture/RequireJSDotNet

NuGet - https://www.nuget.org/packages/RequireJsNet/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM