web-dev-qa-db-ja.com

モジュラーJavaScript(RequireJS / AMD)をASP.NETMVCにバンドルして縮小する

ASP.NET MVCプロジェクトでRequireJS/AMDのようなモジュラーJavaScriptをバンドルおよび縮小するための優れたソリューションの経験があるか、知っている人はいますか?

RequireJSオプティマイザー (おそらくビルド後のアクションで)を使用する最良の方法はありますか?それともASP.NET MVCに適したものはありますか?

33
kendaleiv

匿名の定義を使用した場合に発生する問題だと思います。すべての定義を含む結合/バンドルされたスクリプトファイルが必要な場合は、それらに名前を付ける必要があります。

例えば。

define("someModule", ["jquery", "ko"], function($,ko) { ... });

の代わりに

define(["jquery", "ko"], function($,ko) { ... });

モジュール名としてファイル名を使用すると、ファイル名を非同期でロード(バンドルされていない)およびプリロード(バンドルされている)することができます。そうすれば、必要なものを変更することなく、デバッグモードとリリースモードで作業できます。

匿名定義を処理するかどうかを知るためのRequireJSオプティマイザーの経験はありません。

更新:

私は最近これをしなければならず、私が遭遇した問題の1つは、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が最後であることを確認できれば、その最後のスクリプトタグも必要ありません。

13
Jeff Shepler

これらは、RequireJSをmain.jsにバンドルするための手順です。 <head>タグは1行にまとめることができます。これは、匿名定義の問題には対処していません。

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が機能する必要があります データなし-main (baseUrlを設定する必要がありました)

require.config({
    baseUrl: "scripts"
});
2
zacharydl

これは古い質問ですが、RequireJS.NET NuGetパッケージの一部であるRequireJS.NET Compressor(ASP.NETバンドルではなくYUIコンプレッサーを使用します-少なくとも現時点では)を確認できます。

参照:

コンプレッサー- http://requirejsnet.veritech.io/compressor.html

一般的なドキュメント- http://requirejsnet.veritech.io/

Githubプロジェクト- https://github.com/vtfuture/RequireJSDotNet

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

0
Razvan Dumitru

これが許容できるソリューションかどうかはわかりませんが、Visual Studio 2012には、ネイティブの縮小とバンドルをサポートするNuGetパッケージ(Microsoft.Web.Optimization)があります。 2010年に利用可能かどうかはわかりません

これはapplication_startの1行のコードです

Microsoft.Web.Optimization.BundleTable.Bundles.EnableDefaultBundles();

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

0
McKay