Tất cả các giải pháp tôi tìm thấy bắt buộc bằng cách sử dụng tên tệp khác nhau cho các phiên bản thu nhỏ và nhiều công việc phụ để chuyển đổi giữa sử dụng phiên bản thông thường/rút gọn.
Thay vào đó, tôi muốn các tệp JavaScript được nén có tên gốc nên tôi không phải thay đổi các tham chiếu trong đánh dấu HTML của mình. Tôi có thể sử dụng các tệp Javascript bình thường trong môi trường phát triển của mình, sau đó các phiên bản thu nhỏ sẽ tự động được triển khai khi xuất bản.
Tôi đã tìm thấy một giải pháp đơn giản thực hiện điều đó.
Trước tiên, hãy cài đặt Microsoft Ajax Minifier.
Sau đó, trong Visual Studio tập tin dự án của bạn, ngay trước thẻ đóng </Project>
thêm như sau:
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Microsoft Ajax Minifier\ajaxmin.tasks" />
<Target Name="AfterBuild" Condition="'$(ConfigurationName)'=='Release'">
<ItemGroup>
<JS Include="**\*.js" Exclude="**\*.min.js;obj\**\*.*" />
<CSS Include="**\*.css" Exclude="**\*.min.css;obj\**\*.*" />
</ItemGroup>
<AjaxMin
JsSourceFiles="@(JS)" JsSourceExtensionPattern="\.js$" JsTargetExtension=".jsMIN"
CssSourceFiles="@(CSS)" CssSourceExtensionPattern="\.css$" CssTargetExtension=".cssMIN" />
</Target>
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>
<Target Name="CustomCollectFiles">
<ItemGroup>
<MinJS Include="**\*.jsMIN" />
<FilesForPackagingFromProject Include="%(MinJS.Identity)">
<DestinationRelativePath>%(RecursiveDir)%(Filename).js</DestinationRelativePath>
</FilesForPackagingFromProject>
<MinCSS Include="**\*.cssMIN" />
<FilesForPackagingFromProject Include="%(MinCSS.Identity)">
<DestinationRelativePath>%(RecursiveDir)%(Filename).css</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
nào mã trên làm gì? Khi bạn xuất bản trong Visual Studio, mã này sẽ tìm thấy mọi tệp .js
và .css
trong nguồn của bạn và tạo bản sao được rút gọn bằng cách sử dụng tiện ích mở rộng .jsMIN
và .cssMIN
. Nó sẽ bỏ qua các tệp đã được rút gọn. Sau đó, nó sẽ sao chép các tệp được rút gọn này vào thư mục triển khai, sử dụng tên tệp ban đầu.
Voilà! Bạn vừa xuất bản các tệp JS/CSS được rút gọn, trong khi các tệp gốc của bạn vẫn giữ nguyên trên môi trường phát triển của bạn.
Tùy chọn:
Muốn Ajax Minifier được đóng gói cùng với dự án của bạn? Từ thư mục cài đặt Ajax Minifier, bạn có thể di chuyển AjaxMin.dll
và AjaxMinTask.dll
trực tiếp vào thư mục nguồn của bạn. Tôi đặt chúng trong thư mục App_Data
của tôi. Khi chúng ở đâu đó trong nguồn của bạn, trong Visual Studio, nhấp chuột phải vào chúng, chọn Include in Project
và cũng thay đổi thuộc tính Build Action
thành None
.
Sau đó, trong đoạn code tôi bao gồm ở trên, thay đổi
<Import Project="$(MSBuildExtensionsPath)\Microsoft\Microsoft Ajax Minifier\ajaxmin.tasks" />
để
<UsingTask TaskName="AjaxMin" AssemblyFile="$(MSBuildProjectDirectory)\App_Data\AjaxMinTask.dll" />
Xong.
Mẹo khắc phục sự cố:
Mã chính của tôi ở trên thực thi AfterBuild
và chỉ khi cấu hình là Release
. Vì vậy, nó sẽ chỉ chạy trong khi xuất bản.Nếu cấu hình của bạn được đặt tên khác hoặc bạn muốn cấu hình đó chạy trong các trường hợp khác, hãy sửa đổi mã khi cần.
Có một tiện ích bổ sung miễn phí trong Visual Studio Gallery cho việc này: https://visualstudiogallery.msdn.microsoft.com/059bdfb0-9111-47c7-805c-5d51bba7d0d4 – TylerH
B & M được tích hợp sẵn. Định cấu hình bundleconfig và đảm bảo các tham chiếu WebGrease và Antlr có ở đó. Thời gian chạy sẽ sử dụng các tệp được nhóm và rút gọn dựa trên debug của bạn = "false" trong web.config. – Abhitalks
Bạn không làm việc trên ứng dụng MVC, phải không? Nó sẽ tự động giảm thiểu các tệp tài nguyên nếu có. – im1dermike