Gulp 为什么在wwwroot中安装bower组件

Gulp 为什么在wwwroot中安装bower组件,gulp,bower,asp.net-core,Gulp,Bower,Asp.net Core,我玩ASP.NET 5已经有一段时间了,所以我很惊讶bower组件现在默认放在wwwroot\lib文件夹中。 这种情况是因为文件: 在早期版本中,bower组件存储在/bower\u components文件夹中,这对我来说仍然更有意义 我希望我需要一个gulp/grunt(以wiredep为例)任务来构建JavaScript和CSS文件并将其复制到wwwroot文件夹中 很明显,我遗漏了一些东西,但我无法理解,也找不到关于这件事的任何合适的信息 为什么我希望所有bower组件(包括源文件)都

我玩ASP.NET 5已经有一段时间了,所以我很惊讶bower组件现在默认放在
wwwroot\lib
文件夹中。 这种情况是因为文件:

在早期版本中,bower组件存储在
/bower\u 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下面部署所有额外的cruft,那么可以使用taskrunner将您想要的处理到另一个文件夹中,这与在早期Beta中,如果它们位于wwwroot之外的bower_components文件夹中时您必须执行的操作相同。并将wwwroot/lib从web应用程序的project.json中使用publishExclude发布中排除。

他们被移到了那里,因为Microsoft看到了不习惯新工具的.NET开发人员的许多困惑。他们为.NET开发人员简化了这一过程,将这些组件放到wwwroot中,而不需要运行任务来移动它们。我的来源(以及将其更改为以前行为的解释)来自(MS employee)Scott Hanselman的。

我宁愿使用指向
wwwroot/lib
.bowerrc
文件以及Bower的
exportsOverride
功能,而不必通过各种吞咽/咕噜咕噜任务手动管理各种供应商资产,特别是当一些供应商采用不同的或非标准的dist结构时。Tnx可查看
exportsOverride
。虽然它似乎不适用于最新的beta版:好奇,什么是
exportsOverride
?它是凉亭的内置功能吗?我这样问是因为我以前使用过
main-bower文件
来实现类似的行为。如果
exportsOverride
不适用于您,请查看以下内容。那将是一个很好的解决办法,tnx。我仍然想知道欲望的工作流程是什么。真的很好的答案!谢谢,这很有道理。谢谢!请考虑将其标记为已接受的答案。如果有人提供了一个更好、更权威的答案,你以后可以随时更改并接受他们的答案。我无法排除
wwwroot/lib
文件夹,显然
wwwroot
publishExclude
在测试版的这一点上不是最好的组合:(我在今天的社区站中询问了在wwwroot下面的文件夹中使用publishExclude的问题。他们说它已被记录为一个bug,将在RC中修复。)
<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>