2015-09-25 59 views
19

從我使用ASP.NET 5開始已經有一段時間了,所以我很驚訝,涼亭組件現在默認放在wwwroot\lib文件夾中。 這是因爲.bowerrc文件的情況下:爲什麼在wwwroot中安裝了涼亭組件

{ 
    "directory": "wwwroot/lib" 
} 

在早期版本中的涼亭的部件都存儲在./bower_components文件夾,仍使我更有意義。

我希望我需要一個gulp/grunt(以wiredep爲例)任務來構建並將我的JavaScript和CSS文件複製到wwwroot文件夾中。

很明顯,我錯過了一些東西,但我無法理解它或找到有關此問題的任何合適信息。

爲什麼我要在`wwwroot \ lib'文件夾中包含所有我的bower組件(包括源代碼),以及部署我的Asp.NET 5 Web應用程序時需要的工作流程是什麼?

+1

我寧願用一個指向'.bowerrc'文件'的wwwroot/lib'與鮑爾的'exportsOverride'功能沿除必須手動管理不同廠商的資產與多種一飲而盡/咕嚕任務,尤其是當一些廠商跟進不同的或不標準的dist結構。 – sgbj

+0

Tnx用於'exportsOverride'的洞察。雖然它似乎不工作的最新測試版:http://stackoverflow.com/questions/32678101/bower-exportsoverride-doesnt-work-on-asp-net-5-beta7 –

+0

好奇,什麼是'exportsOverride'?它是涼亭的內置功能嗎?我問這是因爲我以前使用'main-bower-files'來實現類似的行爲。 –

回答

13

我想bower_components文件夾被放棄的原因,現在使用wwwroot/lib是因爲無論是在開發或生產靜態文件需要住在wwwroot下方,否則在每次編輯文件之後,您需要再次運行taskrunner來複制wwwroot下面的文件。如果文件的開發版和生產版都位於wwwroot下方的某個位置,那麼這是一個更高效的工作流程。這樣,您可以編輯和刷新頁面,而不是編輯運行taskrunner,然後刷新頁面。

我建議在創建文件的縮小/處理生產版本時將grunt過程文件放入不同的文件夾,如wwwroot/js。

然後wwwroot/lib文件夾甚至可以從發佈中排除,因爲只有dev腳本版本的庫腳本才能在那裏生存。

我想我自己的不是涼亭組件的自定義腳本可能不應該在wwwroot/lib下生活,所以也許我把unrealified下的wwwroot/dev和處理所有生產的東西在wwwroot/js下,這樣在生產中我只部署具有生產版本縮小/組合文件的wwwroot/js文件夾。所以基本上我們用這種方式製作自己的捆綁包。

新的環境標籤和和腳本taghelper使其能夠輕鬆地指向用於開發和生產各種不同的文件位置,可見在這個例子:

<environment names="Development"> 
    <script src="~/lib/jquery-validation/jquery.validate.js"></script> 
    <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script> 
</environment> 
<environment names="Staging,Production"> 
    <script src="//ajax.aspnetcdn.com/ajax/jquery.validation/1.11.1/jquery.validate.min.js" 
      asp-fallback-src="~/js/lib/jquery-validation/jquery.validate.js" 
      asp-fallback-test="window.jquery && window.jquery.validator"> 
    </script> 
    <script src="//ajax.aspnetcdn.com/ajax/mvc/5.2.3/jquery.validate.unobtrusive.min.js" 
      asp-fallback-src="~/js/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js" 
      asp-fallback-test="window.jquery && window.jquery.validator && window.jquery.validator.unobtrusive"> 
    </script> 
</environment> 

所以,你可以很方便的方法在使用CDN生產。請注意,對於非cdn文件,您不能指向wwwroot以外的任何位置或其下的某個文件夾,因此wwwroot之外的bower_components文件夾中的文件不是指向腳本的位置,因此沒有必要將文件放在那裏。

將腳本鏈接到我的自定義腳本的開發版本時,我喜歡使用新的taghelper屬性asp-append-version =「true」,它將文件內容的散列追加到URL,以確保先前的瀏覽器緩存任何時候文件被編輯或改變都會被忽略。這種情況發生時不需要運行taskrunner,我只需編輯和刷新頁面。

總之,使用wwwroot下面的所有腳本比在其他地方使用它們需要更好的工作流程,並且需要在每次編輯之後運行taskrunner來移動它們。如果你不想從wwwroot/lib下面部署所有額外的東西,那麼你需要把你想要的東西與taskrunner一起處理到另一個文件夾中,就像你使用bower_components文件夾中的wwwroot之外的東西一樣在早期貝塔斯。並排除wwwroot/lib從您的web應用程序的project.json中的publishExclude發佈。

+1

真的很好的答案!謝謝,這是有道理的。 –

+0

謝謝!請考慮將其標記爲已接受的答案。如果有人有更好的更權威的答案,你可以隨時更改並接受他們的答案。 –

+0

我不能排除'wwwroot/lib'文件夾,顯然'wwwroot'和'publishExclude'不是這個測試版的最佳組合:(http://stackoverflow.com/a/32106455/551030 –

7

他們已經移到那裏了,因爲微軟看到了許多.NET開發人員不習慣新工具的困惑。他們通過將這些組件放入wwwroot而不是運行任務來移動它們,從而簡化了.NET開發人員的工作。我的來源(以及將其更改爲以前行爲的解釋)來自(MS員工)Scott Hanselman的blog post