包括所有文件匹配正则表达式razor cshtml

时间:2016-12-29 21:28:56

标签: c# razor asp.net-core asp.net-core-mvc

我想在CSHTML文件中包含Angular2构建文件。

目前,我的包括:

@section scripts {
    <script src="~/dist/main.js" asp-append-version="true"></script>
}

但Angular2在每个prod构建中产生文件名中具有不同标识符的文件。

chunk    {0} main.2e0750e4cb976b8dca8a.bundle.js (main) 15.8 kB {3} [initial] [rendered]
chunk    {1} styles.b64dd2f7c2e3011c4efb.bundle.css (styles) 154 kB {4} [initial] [rendered]
chunk    {2} scripts.e7e62c29938f18f13e86.bundle.js (scripts) 128 kB {4} [initial] [rendered]
chunk    {3} vendor.05b8df0708b580c61647.bundle.js (vendor) 3.42 MB [initial] [rendered]
chunk    {4} inline.1b4aa06545162c1bb581.bundle.js (inline) 0 bytes [entry] [rendered]

我不想停用(如果可能的话)包含这些标识符的事实(用于非缓存目的)。一个人在github问题页面上回答可以使用一些正则表达式来制作包含:

/(main|styles|scripts|vendor|inline).*.bundle.(map|js|css)/g

但我不知道如何将其传递给我的C#/ cshtml文件。

它应该导致包括与给定目录中的模式匹配的所有文件(wwwroot,或〜作为快捷方式)。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:4)

您可以将asp-src-include标记助手用于脚本,使用asp-href-include用于链接(css)。

<script asp-src-include="~/dist/main.*.bundle.js" asp-append-version="true"></script>
<link asp-href-include="~/dist/styles.*.bundle.css"/>

但是,你不能在其中使用正则表达式,只能使用全局路径(即dist/**/*.js,其中**也会查看所有子文件夹。

如果这不符合您的需求,您需要编写自己的标记助手。

有关LinkTagHelperScriptTagHelper的当前实施,请参阅GitHub。

我不建议您使用正则表达式作为主要部分,因为您无法控制文件的包含顺序。所以最好手动控制它,只制作标识符/ hashsum变量。