Wie zu minifizieren von JavaScript im script-block wird auf den Seiten Ansicht
Wie minifizieren von JavaScript innerhalb einer Seite anzeigen script-block mit minimalem Aufwand?
Habe ich einige Seite bestimmte Skripts, würde gerne auf bestimmten Seiten anzeigen. Aber die ASP.NET MVC4-Bündelung und Verkleinerung funktioniert nur mit script-Dateien, nicht Skript-code innerhalb einer Seite anzeigen.
UPDATE
Nahm ich Sohnee Ratschläge zu extrahieren, die scripts in Dateien. Aber ich brauche, um Sie zu verwenden auf bestimmten Seiten so, was ich am Ende dabei ist:
layout-Seite, die ich erstellt einen optionalen Abschnitt für die Seite spezielle javascript-block:
@RenderSection("js", required: false)
</body>
dann in der Ansicht Seite, sagen wir mal Index.cshtml
ich render das Skript Abschnitt wie:
@section js{
@Scripts.Render("~/bundles/js/" + Path.GetFileNameWithoutExtension(this.VirtualPath))
}
wie Sie sehen können, nimmt der javascript-Dateinamen (index.js
) ist die gleiche wie die Ansicht-Seite-name (index.cshtml
). dann im bundle config habe ich:
var jsFiles = Directory.GetFiles(HttpContext.Current.Server.MapPath("Scripts/Pages"), "*.js");
foreach (var jsFile in jsFiles)
{
var bundleName = Path.GetFileNameWithoutExtension(jsFile);
bundles.Add(new ScriptBundle("~/bundles/js/" + bundleName).Include(
"~/Scripts/pages/" + Path.GetFileName(jsFile)));
}
dann, wenn Sie auf index
Seite, die HTML-Ausgabe wird sein:
<script src="/bundles/js/Index?v=ydlmxiUb9gTRm508o0SaIcc8LJwGpVk-V9iUQwxZGCg1"></script>
</body>
und wenn Sie auf products
Seite, die HTML-Ausgabe wird sein:
<script src="/bundles/js/Products?v=ydlmxiUb9gTRm508o0SaIcc8LJwGpVk-V9iUQwxZGCg1"></script>
</body>
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Weg, dies zu tun, mit minimalem Aufwand zu extrahieren und es in eine Skript-Datei. Dann können Sie die Bündelung und Verkleinerung nur, wie Sie wollen.
Wenn Sie möchten, verkleinern Sie die inline -, wird es eine viel größere Anstrengung ist, als einfach das verschieben der script-off-Seite.
<script>window.mynamespace.Model = @(Html.Raw(Json.Encode(Model)));</script>
am Anfang von meinem code. Dies ermöglicht den Verweis auf das Modell in anderen Skripts wurden minified. Die alternative ist ein AJAX-call, aber das bedeutet zusätzliche Wartezeiten. Bauen Sie eine richtige ViewModel, und das funktioniert Super.Können Sie verkleinern inline-Skripts werden mit diesem HTML-helper
Und in deinem Razor-Ansicht verwenden Sie es wie diese
Wenn Sie mit System.Web.Optimierung über alle notwendigen dlls sind bereits verwiesen, andernfalls können Sie installieren WebGrease NuGet-Paket.
Einige weitere details finden Sie hier: http://www.cleansoft.lv/minify-inline-javascript-in-asp-net-mvc-with-webgrease/
BEARBEITEN:
Ersetzt DynamicInvoke() mit Invoke(). Keine Notwendigkeit für Laufzeit-checks hier Aufrufen ist viel schneller als DynamicInvoke. Hinzugefügt .? zu überprüfen, null.
(markup.DynamicInvoke(helper.ViewContext) ?? "").ToString();
Debugger.IsAttached
zu entscheiden, ob Sie zu verkleinern oder nicht. Manchmal wollen Sie nicht Ihre JS minified wenn man lokal Debuggen.Basierend auf @samfromlv Antwort, ich erstellte eine Erweiterung zu behandeln, CSS sowie. Es dauert auch
BundleTable.EnableOptimizations
berücksichtigt.OptimizationExtensions.cs
<text>
mit@
Hinzufügen in eine Antwort für ASP.NET MVC-Kern. Die Lösung, die ich verwendet, um zu verkleinern inline-JS und razor generierten html wurde WebMarkupMin.
Es letztlich bis gekocht durch hinzufügen dieser zwei winzige änderungen an meinem Projekt:
Gibt es eine große blog-post von Andrew Lock (Autor ASP.NET Kern in Aktion) über die Verwendung WebMarkupMin https://andrewlock.net/html-minification-using-webmarkupmin-in-asp-net-core/ WebMarkupMin ist in hohem Maße konfigurierbar und Andrew ' s post geht so mehr vertiefte, sehr zu empfehlen Lesen Sie es aufmerksam, bevor Sie einfach nur kopieren und einfügen.