یکی کردن و فشرده سازی فایلهای استاتیک در ASP.NET Core
هدف از یکی کردن و فشرده سازی فایلهای استاتیک مانند اسکریپتها و فایلهای CSS، بهبود کارآیی برنامه با کاهش حجم نهایی ارائهی آن و همچنین کاهش تعداد رفت و برگشتهای به سرور برای دریافت فایلهای متعدد مرتبط به آن است. در عملیات Bundling، چندین فایل، به یک تک فایل تبدیل میشوند تا اتصالات مرورگر به وب سرور، جهت دریافت آنها به نحو چشمگیری کاهش پیدا کند و در عملیات Minification، مراحل متعددی بر روی کدهای نوشته شده صورت میگیرد تا حجم نهایی آنها کاهش پیدا کنند. مایکروسافت در ASP.NET Core RTM، ابزاری را به نام BundlerMinifier.Core جهت برآورده کردن این اهداف ارائه کردهاست. بنابراین اولین قدم، نصب وابستگیهای آن است.
برای اینکار یک سطر ذیل را به فایل project.json اضافه کنید. این بسته باید به قسمت tools اضافه شود تا قابلیت فراخوانی از طریق خط فرمان را نیز پیدا کند:
"tools": { "BundlerMinifier.Core": "2.1.258" },
No executable found matching command "dotnet-bundle" Version for package `BundlerMinifier.Core` could not be resolved.
اسکریپت نویسی برای کار با BundlerMinifier.Core
روشهای زیادی برای کار با ابزار BundlerMinifier.Core وجود دارند؛ منجمله انتخاب فایلها در solution explorer و سپس کلیک راست بر روی فایلهای انتخاب شده و انتخاب گزینهی bundler & minifier برای یکی کردن و فشرده سازی خودکار این فایلها. برای این منظور افزونهی Bundler & Minifier را نیاز است نصب کنید.
اما روشی که قابلیت خودکارسازی را دارد، استفاده از فایل ویژهی bundleconfig.json این ابزار است. برای این منظور فایل جدید bundleconfig.json را به ریشهی پروژه اضافه کرده و سپس محتوای ذیل را به آن اضافه کنید:
[ { "outputFileName": "wwwroot/css/site.min.css", "inputFiles": [ "wwwroot/css/site.css" ] }, { "outputFileName": "wwwroot/js/site.min.js", "inputFiles": [ "bower_components/jquery/dist/jquery.min.js", "bower_components/jquery-validation/dist/jquery.validate.min.js", "bower_components/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js" ], "minify": { "enabled": true, "renameLocals": true }, "sourceMap": false } ]
با ذخیره سازی این فایل، کار یکی سازی و فشرده کردن مداخل آن به صورت خودکار صورت خواهد گرفت.
خودکار سازی فرآیند یکی کردن و فشرده سازی فایلهای استاتیک
برای خودکار سازی این فرآیند، میتوان به صورت زیر عمل کرد. فایل project.json را گشوده و قسمت scripts آنرا به نحو ذیل تغییر دهید:
"scripts": { "precompile": [ "dotnet bundle" ], "prepublish": [ "bower install" ], "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] }
یک نکته: به منوی Build گزینهی Update all bundles نیز با نصب افزونهی Bundler & Minifier اضافه میشود. همچنین اگر از منوی Tools گزینهی Task runner explorer را انتخاب کنید، فایل bundleconfig.json توسط آن شناسایی شده و گزینهی update all files را نیز در اینجا مشاهده خواهید کرد.
ساده سازی تعاریف فایل Layout برنامه
در یک چنین حالتی دیگر نباید در فایل layout شما، ارجاعات مستقیمی به پوشهی مثلا bower_components وجود داشته باشند و یا در کلاس آغازین برنامه، نیازی نیست تا این پوشه را عمومی کنید. لیست مداخلی را که نیاز دارید، به ترتیب از پوشههای مختلفی تهیه و در فایل bundleconfig.json ذکر کنید تا یکی شده و خروجی js/site.min.js را تشکیل دهند. این مورد تنها مدخلی است که نیاز است در فایل layout برنامه ذکر شود (بجای چندین و چند مدخل مورد نیاز):
<script src="~/js/site.min.js" asp-append-version="true" type="text/javascript"></script>