ASP.NET Core 2.2 MVC开发与产品环境中的捆绑

时间:2019-07-26 18:44:16

标签: asp.net-mvc asp.net-core bundling-and-minification

我正在将我的应用程序设置为不在开发中时捆绑css和js文件,而在开发时不捆绑。

为此,我首先有一个bundleconfig.json文件:

[
  {
    "outputFileName": "wwwroot/css/bundle.min.css",
    "inputFiles": [
      "wwwroot/lib/bootstrap/bootstrap.min.css",
      "wwwroot/lib/jqueryui.jquery-ui.min.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/bundle.min.js",
    "inputFiles": [
      "wwwroot/lib/jquery/jquery.min.js",
      "wwwroot/lib/jqueryui/jquery-ui.min.js",
      "wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js"
    ]
  }
]

然后在我的页面中,我有一个标题标签:

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewBag.Title</title>
    <environment exclude="development">
        <link rel="stylesheet" href="~/css/bundle.min.css" asp-append-version="true" />
        <script type="text/javascript" src="~/js/bundle.min.js" asp-append-version="true"></script>
    </environment>

    <environment include="development">
        <link rel="stylesheet" href="~/lib/bootstrap/bootstrap.css" asp-append-version="true" />
        <link rel="stylesheet" href="~/lib/jqueryui/jquery-ui.css" asp-append-version="true" />

        <script type="text/javascript" src="~/lib/jquery/jquery.js" asp-append-version="true"></script>
        <script type="text/javascript" src="~/lib/jqueryui/jquery-ui.js" asp-append-version="true"></script>
        <script type="text/javascript" src="~/lib/bootstrap/dist/js/bootstrap.bundle.js" asp-append-version="true"></script>
    </environment>
</head>

一切正常。我只是不喜欢必须在budingconfig.json和标头中的开发环境标记中复制文件列表的事实。

在WebForms项目中,我可以使用<%:Scripts.Render(“ ...”)%>,如果处于开发模式,它将为捆绑包中的每个项目生成链接,如果处于开发模式,它将为捆绑包生成1个链接。不处于开发模式。 .net核心MVC项目中是否也有类似的东西?

2 个答案:

答案 0 :(得分:1)

ASP.NET Core中没有内置方法可以执行此操作。但是,直接滚动自己的内容是非常直接的。

Mad Christensen为MVC5构建了一个解包器,here是使它适应.NET Core的要旨。

您可以这样使用它:

<environment names="Development">
    @Bundler.Unpack(HostingEnvironment.ContentRootPath, "/js/site.min.js")
</environment> 

但是,如果除调试之外没有其他特定的理由要包含每个文件,则还可以依赖Sourcemap。 bundleconfig中为此有一个标志。 ("sourceMap": true

答案 1 :(得分:0)

您可以尝试像下面这样的 TagHelper

https://github.com/meziantou/Meziantou.AspNetCore.BundleTagHelpers

这将帮助您实现您想要的目标。而不是编写以下类型的代码

<environment names="Development">
    <link rel="stylesheet" href="~/css/site1.css" />
    <link rel="stylesheet" href="~/css/site2.css" />
    <link rel="stylesheet" href="~/css/site3.css" />
</environment>

<environment names="Staging,Production">
    <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
</environment>

你只能这样写:

<bundle name="wwwroot/css/site.min.css" />
  • 在生产中,它使用缩小的文件并将版本附加到 查询字符串(与 asp-append-version 的行为相同)。
  • 在开发中,它使用所有输入文件并且不附加版本。