Pregunta Agrupamiento y minificación de JavaScript modular (RequireJS / AMD) con ASP.NET MVC


¿Alguien tiene alguna experiencia o sabe alguna buena solución para agrupar y minificar JavaScript modular como RequireJS / AMD en un proyecto ASP.NET MVC?

Es la mejor manera de usar el RequireJS optimizer (¿quizás en una acción posterior a la compilación?) ¿O hay algo mejor para ASP.NET MVC?


32
2017-07-20 19:27


origen


Respuestas:


Creo que el problema que tendrá es si utilizó definiciones anónimas. Si desea un archivo de script combinado / incluido que contenga todas sus definiciones, tendrá que nombrarlas.

p.ej.

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

en lugar de

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

Si usa los nombres de los archivos como los nombres de los módulos, podrá cargarlos de manera asíncrona (no empaquetada) así como también cargados (empaquetados). De esta forma puede trabajar en modo de depuración y en modo de lanzamiento sin tener que cambiar sus requisitos.

No tengo experiencia con el optimizador RequireJS para saber si se ocupa de las definiciones anónimas o no.

ACTUALIZAR:

Hace poco tuve que hacer esto y uno de los problemas con los que me topé fue el atributo principal de datos de la etiqueta del script que carga require.js. Como el archivo main.js tenía dependencias en los módulos incluidos, deben cargarse antes de main.js pero después de require.js. Así que tuve que deshacerme de data-main y cargar ese archivo (desagregado) al final.

de

<script src="../JS/require-v2.1.2.js" type="text/javascript" data-main="main.js"></script>

a

<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>

No he buscado, pero si la configuración del paquete podría asegurar que main.js es el último, entonces ni siquiera necesitaría esa última etiqueta de script.


13
2017-11-13 21:59



Estos son los pasos para obtener RequireJS incluido con main.js. Puedes bajar a una línea en el <head> etiqueta. Esto no resuelve el problema con definiciones anónimas.

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 debe funcionar sin datos principales (Necesitaba establecer baseUrl)

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

2
2018-03-22 00:54



No estoy seguro de si esta es una solución aceptable o no, pero Visual Studio 2012 tiene un paquete NuGet (Microsoft.Web.Optimization) que admite la agrupación y la minificación nativa. No estoy seguro de si está disponible para 2010

Es una línea de código en application_start

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

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


0
2017-07-20 20:38



Sé que esta es una vieja pregunta, pero puedes echar un vistazo a RequireJS.NET Compressor (usa el compresor YUI, no el empaquetado de ASP.NET, al menos por el momento) que es parte del paquete RequireJS.NET NuGet.

Referencias

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

Documentación General - http://requirejsnet.veritech.io/

Proyecto Github - https://github.com/vtfuture/RequireJSDotNet

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


0
2018-06-04 10:28