自从我使用ASP.NET 5以来已经有一段时间了,令我惊讶的是,默认情况下,Bower组件现在默认放置在wwwroot\lib
文件夹中。
这是由于.bowerrc文件引起的:
{
"directory": "wwwroot/lib"
}
在较早的版本中,bower组件存储在
./bower_components
文件夹中,这对我来说仍然更有意义。我希望我需要一个
gulp/grunt
(例如,带有wiredep)任务来构建我的JavaScript和CSS文件并将其复制到wwwroot
文件夹中。显然,我缺少了一些东西,但是我对此一无所知,也找不到任何合适的信息。
为什么我希望所有的Bower组件(包括源代码)都位于“ wwwroot \ lib”文件夹中,尤其是在部署时,以及部署Asp.NET 5 Web应用程序所需的工作流程是什么?
最佳答案
我认为bower_components文件夹被放弃而现在使用wwwroot / lib的原因是因为无论在开发环境还是生产环境下,静态文件都必须位于wwwroot下,否则在每次编辑文件后,您都需要再次运行taskrunner以将文件复制到wwwroot下。如果文件的开发版本和生产版本都位于wwwroot以下某个位置,则这是一种更高效的工作流程。这样,您可以编辑和刷新页面,而不是编辑运行taskrunner,然后刷新页面。
我建议在创建文件的缩小/处理后的生产版本时,将grunt处理文件放入不同的文件夹(如wwwroot / js)中。
然后,甚至可以将wwwroot / lib文件夹从发布中排除,因为只有开发脚本版本的库脚本才会驻留在该文件夹中。
我在考虑我自己的不是Bower组件的自定义脚本可能不应该存在于wwwroot / lib下,所以也许我将未缩小的脚本放在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发布。