Подтвердить что ты не робот

Объединение и минимизация модульного JavaScript (RequireJS/AMD) с помощью ASP.NET MVC

Есть ли у кого-нибудь опыт или какие-либо хорошие решения для связывания и минимизации модульного JavaScript, например RequireJS/AMD, в проекте ASP.NET MVC?

Лучший способ использовать Оптимизатор RequireJS (возможно, в post post action?) - или там что-то лучше для ASP.NET MVC?

4b9b3361

Ответ 1

Я думаю, что проблема, с которой вы столкнетесь, - это использование анонимных определений. Если вам нужен объединенный/связанный файл script, содержащий все ваши определения, вы должны будете назвать их.

например.

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

вместо

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

Если вы используете имена файлов в качестве имен модулей, вы сможете загрузить их асинхронно (не в комплекте), а также предварительно загруженные (в комплекте). Таким образом, вы можете работать в режиме отладки, а также в режиме выпуска без необходимости изменения.

У меня нет опыта работы с оптимизатором RequireJS, чтобы узнать, не зависит ли он от анонимного.

UPDATE:

Мне недавно пришлось это сделать, и одна из проблем, с которыми я столкнулся, - это атрибут data-main тега загрузки script require.js. Поскольку файл main.js имеет зависимости от связанных модулей, их необходимо загрузить до main.js, но после require.js. Поэтому мне пришлось перерезать основные данные и загрузить этот файл (разделенный) последним.

от

<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 является последним, тогда даже не понадобится тег script.

Ответ 2

Это шаги для получения 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 должен работать без основной информации (мне нужно было установить baseUrl)

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

Ответ 3

Я не уверен, что это приемлемое решение или нет, но 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

Ответ 4

Я знаю, что это старый вопрос, но вы можете взглянуть на RequireJS.NET Compressor (использует компрессор YUI, а не пакет ASP.NET - по крайней мере на данный момент), который является частью пакета RequireJS.NET NuGet.

Ссылки:

Компрессор - http://requirejsnet.veritech.io/compressor.html

Общая документация - http://requirejsnet.veritech.io/

Проект Github - https://github.com/vtfuture/RequireJSDotNet

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