Saya memiliki masalah aneh dengan bundel mvc4 tidak termasuk file dengan ekstensi .min.js
Di kelas BundleConfig saya, saya menyatakan
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/jquery")
.Include("~/Scripts/jquery-1.8.0.js")
.Include("~/Scripts/jquery.tmpl.min.js"));
}
Dalam pandangan saya, saya menyatakan
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
Dan ketika itu membuat, itu hanya membuat
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Jika saya mengganti nama jquery.tmpl.min.js menjadi jquery.tmpl.js (dan memperbarui jalur dalam bundel yang sesuai), kedua skrip di-render dengan benar.
Apakah ada beberapa pengaturan konfigurasi yang menyebabkannya mengabaikan file '.min.js'?
v
parameter kecil yang bagus hash yang akan ditambahkan ke url, dan perubahan ketika isi file perubahan)Jawaban:
Solusi yang saya posting awalnya dipertanyakan (adalah hack kotor). Perilaku tweak telah berubah dalam Microsoft.AspNet.Web.Optimasi paket dan tweak tidak berfungsi lagi, seperti yang ditunjukkan oleh banyak komentator. Saat ini saya tidak dapat mereproduksi masalah sama sekali dengan versi 1.1.3 dari paket.
Silakan lihat sumber System.Web.Optimization.BundleCollection (Anda dapat menggunakan dotPeek misalnya) untuk pemahaman yang lebih baik tentang apa yang akan Anda lakukan. Baca juga jawaban Max Shmelev .
Jawaban asli :
Ubah nama .min.js menjadi .js atau lakukan sesuatu seperti
sumber
Microsoft menyiratkan perilaku berikut (dan saya lebih suka mengikutinya dalam proyek saya):
versi pendek
Akibatnya, Anda secara otomatis akan memiliki script.js termasuk dalam mode DEBUG dan script.min.js dalam mode RELEASE .
versi panjang
Anda juga dapat memiliki versi .debug.js . Dalam hal ini file tersebut dimasukkan dalam prioritas berikut di DEBUG:
dalam PERS:
catatan
Dan omong-omong, satu-satunya alasan untuk memiliki .min versi skrip Anda di MVC4 adalah kasus ketika versi minified tidak dapat diproses secara otomatis. Misalnya kode berikut tidak dapat dikaburkan secara otomatis:
Dalam semua kasus lain, Anda bisa menggunakan hanya versi debug naskah Anda.
sumber
jquery.tmpl
) tidak memiliki, tidak datang bersama, tidak bisa mengunduh versi file non-min. Bundler mengabaikan file skrip sama sekali jika tidak memiliki versi non-min dalam mode debugJika semua yang Anda miliki adalah versi file yang diperkecil, solusi paling sederhana yang saya temukan adalah menyalin file yang diperkecil, menghapus .min dari nama file yang disalin, kemudian merujuk nama file yang tidak diperkecil dalam bundel Anda.
Sebagai contoh, katakanlah Anda membeli komponen js dan mereka memberi Anda file bernama some-lib-3.2.1.min.js. Untuk menggunakan file ini dalam bundel, lakukan hal berikut:
Salin some-lib-3.2.1.min.js dan ganti nama file yang disalin ke some-lib-3.2.1.js. Sertakan kedua file dalam proyek Anda.
Referensi file non-minify di bundel Anda, seperti ini:
Hanya karena file tanpa 'min' dalam nama sebenarnya diperkecil seharusnya tidak menyebabkan masalah (selain fakta bahwa itu pada dasarnya tidak dapat dibaca). Ini hanya digunakan dalam mode debug dan ditulis sebagai skrip terpisah. Ketika tidak dalam mode debug, file min yang dikompilasi sebelumnya harus disertakan dalam bundel Anda.
sumber
Saya telah menemukan solusi bagus yang berfungsi setidaknya di MVC5, Anda bisa menggunakan
Bundle
sajaScriptBundle
. Tidak memiliki perilaku cerdasScriptBundle
yang tidak kita sukai (mengabaikan .min, dll.) Dalam kasus ini. Dalam solusi saya, saya gunakanBundle
untuk skrip pihak 3d dengan file .min dan .map dan saya gunakanScriptBundle
untuk kode kita. Saya belum melihat adanya kelemahan dalam melakukannya. Untuk membuatnya bekerja dengan cara ini, Anda perlu menambahkan file asli misalnya angular.js, dan itu akan memuat angular.js dalam debug dan itu akan membundel angular.min.js dalam mode rilis.sumber
ScriptTable.EnableOptimizations = false
). Jalur skrip yang berisi pola tidak dirender (mis~/Scripts/thirdpartylib/*.js
.). Ini tidak bekerja ketikaEnableOptimizations = true
, tetapi begituScriptBundle
.System.Web.Optimizations
atau dari paket nugetMicrosoft.Web.Optimizations
?.min.js
ada file, dan*.js
polanya tidak cocok dengan file yang diakhiri.min.js
.Untuk membuat
*.min.js
file, Anda harus menonaktifkanBundleTable.EnableOptimizations
, yang merupakan pengaturan global yang berlaku untuk semua bundel.Jika Anda ingin mengaktifkan pengoptimalan hanya untuk bundel tertentu, Anda dapat membuat
ScriptBundle
tipe Anda sendiri yang memungkinkan pengoptimalan sementara saat menghitung file dalam bundel.Gunakan
OptimizedScriptBundle
sebagai gantiScriptBundle
untuk bundel yang file mininya harus selalu digunakan, terlepas dari apakah ada file yang tidak diperkecil.Contoh untuk Kendo UI untuk ASP.NET MVC, yang didistribusikan sebagai kumpulan hanya file yang diperkecil.
sumber
Untuk kasus saya, saya menggunakan perpustakaan Knockout.js (luar biasa!) Yang muncul sebagai versi Debug / Non:
Untuk membuat ini bekerja, saya memasukkan "Knockout- {Version} .js" (non-debug) di Bundle saya dan mendapatkan .debug. File js dalam mode Debug.
sumber
Cara mudah cukup Ubah nama file .min misalnya, Anda memiliki abc.min.css daripada hanya mengubah nama file ini menjadi abc_min.css dan menambahkan ini ke bundel Anda. Saya tahu ini bukan cara yang tepat untuk melakukannya, tetapi hanya solusi sementara. terima kasih dan selamat coding.
sumber
Bundler memiliki banyak manfaat, periksa halaman ini TETAPI :
Microsoft MVC4 Platform Mempertimbangkan bahwa Anda memiliki setidaknya versi minify & versi unminified untuk setiap Script atau Style Bundle (file lain seperti Debug dan vsdoc juga tersedia). Jadi Kami memiliki masalah dalam situasi yang hanya ada satu dari file-file ini.
Anda dapat mengubah status debug dalam file web.config secara permanen untuk menangani output:
Lihat perubahan output! Pemfilteran file berubah. Untuk memenuhi tujuan tersebut, kita harus mengubah abaikan penyaringan kasus yang akan mengubah logika aplikasi!
sumber
Teman-teman saya hanya akan menyimpannya sampai Microsoft membuatnya bertindak bersama
Coba ini
Di RegisterBundles buat bundel ini untuk Kendo
Di _Layout.cshtml cantumkan:
Dengan cara ini kami mendapatkan bundel terbaik dalam Produksi dan referensi di Debug
Perbaiki ketika Microsoft memperbaiki Kode MVC 4 mereka
sumber