2014-10-01 158 views
1

當文件的本地縮小版本不是存在時,捆綁/縮小的預期行爲是什麼?MVC捆綁和縮小

我認爲,當一個本地.min.js文件發現它只會使用它(當優化釋放),如果調試將使用其他。當針對發佈進行優化但找不到.min.js文件時,我認爲它會相應地縮小該文件。

但是,我發現即使我的腳本文件夾中有一個.min.js文件,捆綁包中輸出的內容(在發行版中)也不一樣 - 它已被更改。

我應該補充說,這些已經添加爲Bundle.config中的ScriptBundles,並且所有的轉換/忽略列表等都被保留在默認值。

問題出現在第三方庫(如jQuery)的情況下。我不希望他們提供的文件被捆綁過程縮小 - 只是使用已提供的縮小文件。

謝謝。

+0

你可以縮小你的jQuery版本,好處是當你這樣做時,你確定該文件在那裏,但你也可以添加引用的縮小與風險,有人可能會刪除它,你會鬆動jquery 。你有完整的jQuery的原因是你可以在開發中調試它,並部署縮小,也可以爲高級用戶,你可以改變它做你想做的事(不可取,但仍然可能) – 2014-10-01 15:48:04

回答

0

你的假設是正確的。

如果本地縮小版本存在,當發生捆綁時,這是將要使用的版本。它再次通過縮小,你可以告訴,因爲它刪除了jQuery說你必須保留的許可評論(詳見How can I preserve comments that matter in MVC 4 style bundling?),也可以重命名變量。

如果當地縮小版本不是存在,那麼它將使用未經縮小的版本,這將通過捆綁/縮小進行處理。

所以在這兩種情況下,它都會通過縮小。

+0

有趣的。感謝您的反饋。在我的情況下,它看起來好像縮小已經打破了jQuery文件,因爲我收到錯誤,函數'ready'未定義。 – obaylis 2014-10-06 07:59:49

+0

@obaylis有趣。不能說我見過這種事。 – MikeSmithDev 2014-10-06 11:36:16

+0

它只是讓我思考縮小過程如何避免這種情況?在jQuery的情況下,您不希望任何核心函數名稱被縮小/更改。 – obaylis 2014-10-06 11:43:34

0

默認情況下,當使用ScriptBundle類註冊腳本包時,不管.min.js如何,所有包含的文件都會再次縮小。原因是因爲ScriptBundle使用了一個特定的IBundleTransform實現,它總是會縮小JavaScript文件的大小。

要覆蓋此行爲的虛擬實現,可用於:

public class NoTransform : IBundleTransform 
{ 
    public void Process(BundleContext context, BundleResponse response) 
    { 
    } 
} 

註冊捆綁:

bundles.Add(new Bundle("~/bundles/jquerynotransform", new NoTransform()).Include("~/Scripts/jquery-{version}.js"));