为什么在wwwroot中安装了凉亭组件

时间:2015-09-25 13:19:33

标签: gulp bower asp.net-core

自从我使用ASP.NET 5以来已经有一段时间了,所以我很惊讶现在默认将bower组件放在wwwroot\lib文件夹中。 这是因为.bowerrc文件:

{
    "directory": "wwwroot/lib"
}

在早期版本中,bower组件存储在./bower_components文件夹中,这对我来说仍然更有意义。

我希望我需要一个gulp/grunt(例如使用wiredep)任务来构建我的JavaScript和CSS文件并将其复制到wwwroot文件夹中。

显然我错过了一些东西,但我无法理解它或找到有关此事的任何合适信息。

为什么我要在`wwwroot \ lib'中使用我所有的bower组件(包括 sources )文件夹,特别是在部署时,以及部署我的Asp.NET 5 Web应用程序所需的工作流程是什么?

2 个答案:

答案 0 :(得分:13)

我认为bower_components文件夹被放弃并且现在使用wwwroot / lib的原因是因为无论是dev还是生产静态文件都需要在wwwroot下面生存,否则在每次编辑文件后你需要再次运行taskrunner来复制文件在wwwroot下面。如果文件的开发和生产版本都位于wwwroot下面的某个位置,那么这是一个更高效的工作流程。这样你就可以编辑和刷新页面,而不是编辑run taskrunner,然后刷新页面。

我建议在创建文件的缩小/处理生产版本时,将grunt流程文件放入不同的文件夹,如wwwroot / js。

然后,wwwroot / lib文件夹甚至可以从发布中排除,因为只有开发版本的库脚本才会存在。

我认为我自己的不是bower组件的自定义脚本应该不在wwwroot / lib下,所以也许我把未经授权的脚本放在wwwroot / dev下并处理wwwroot / js下的所有生产内容以便在生产中我只部署wwwroot / js文件夹,其中包含生产版本缩小/组合文件。所以基本上我们就这样制作自己的捆绑包。

新环境标记和脚本标记帮助可以轻松指向开发和生产的不同文件位置,如下例所示:

<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 =&#34; true&#34;它将文件内容的散列附加到url,确保在编辑或更改文件时绕过先前的浏览器缓存。这种情况发生时无需运行taskrunner,我只需编辑并刷新页面。

总而言之,将wwwroot下面的所有脚本都放在比其他地方更好的工作流程上,需要运行taskrunner来在每次编辑后移动它们。如果您不想从wwwroot / lib下面部署所有额外的内容,那么使用taskrunner将您想要的内容处理到不同的文件夹,就像在bower_components文件夹中的wwwroot之外一样。他们曾经是早期的测试版。并在您的网络应用程序的project.json中使用publishExclude将wwwroot / lib排除在发布之外。

答案 1 :(得分:7)

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