Asp.net mvc 具有缩小JS和CSS的公共条件视图

Asp.net mvc 具有缩小JS和CSS的公共条件视图,asp.net-mvc,razor,asp.net-mvc-5,razorengine,Asp.net Mvc,Razor,Asp.net Mvc 5,Razorengine,我正在使用ASP.NETMVC5开发我的网站。我正在使用Grunt缩小我的CSS和JS。一切正常,但如果我正在发布(发布模式)或调试(我需要清楚地阅读CSS和JS),我需要更改文件的路由源 大概是这样的: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-wid

我正在使用ASP.NETMVC5开发我的网站。我正在使用Grunt缩小我的CSS和JS。一切正常,但如果我正在发布(发布模式)或调试(我需要清楚地阅读CSS和JS),我需要更改文件的路由源

大概是这样的:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"]</title>
    <environment include="Development">
        <link rel="stylesheet" href="~/css/sasw.css" asp-append-version="true" />
    </environment>
    <environment exclude="Development">
        <!-- Google Analytics here for example -->
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
[
  {
    "outputFileName": "wwwroot/css/site.min.css",
    "inputFiles": [
      "wwwroot/css/sasw.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/sasw.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
  }
]
[调试模式]


[放松模式或公共模式]


我已经阅读了有关StackOverflow()的这篇文章,我不喜欢建议的解决方案,因为我认为,(不确定)加载的Razon视图将始终在生产服务器中检查它是否处于发布或调试模式,我认为这是不必要的

有人能证实我是对的吗?我需要手动进行更改吗?还有其他解决办法吗


谢谢!!问候

实现这一点的一种方法是只检查http上下文中的调试模式

@if (HttpContext.Current.IsDebuggingEnabled)
{
    <script src="scripts/myscript.js"></script>
}
else
{
    <script src="dist/myscript.min.js"></script>
}
@if(HttpContext.Current.IsDebuggingEnabled)
{
}
其他的
{
}

更新答案

多亏了我了解了环境标记帮助器的存在,所以我们现在可以像这样使用它,而不是我以前手动获得相同答案的答案:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"]</title>
    <environment include="Development">
        <link rel="stylesheet" href="~/css/sasw.css" asp-append-version="true" />
    </environment>
    <environment exclude="Development">
        <!-- Google Analytics here for example -->
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
[
  {
    "outputFileName": "wwwroot/css/site.min.css",
    "inputFiles": [
      "wwwroot/css/sasw.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/sasw.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
  }
]
此解决方案与在
bundleconfig.json

在我的例子中,
bundleconfig.json
如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>@ViewData["Title"]</title>
    <environment include="Development">
        <link rel="stylesheet" href="~/css/sasw.css" asp-append-version="true" />
    </environment>
    <environment exclude="Development">
        <!-- Google Analytics here for example -->
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
</head>
[
  {
    "outputFileName": "wwwroot/css/site.min.css",
    "inputFiles": [
      "wwwroot/css/sasw.css"
    ]
  },
  {
    "outputFileName": "wwwroot/js/site.min.js",
    "inputFiles": [
      "wwwroot/js/sasw.js"
    ],
    "minify": {
      "enabled": true,
      "renameLocals": true
    },
    "sourceMap": false
  }
]
我还添加了一个名为
BuildBundlerMinifier
的nuget,它自动缩小并绑定js和css,将缩小后的版本放在与原始版本相同的文件夹中


PS:请记住忽略(例如:在
.gitignore
*.min.js
*.min.css
如果您采用相同的方法,则让构建过程每次生成一个新的,而不必提交给源代码管理。

考虑编写一个返回脚本URL路径的静态帮助函数,它从web.config文件读取(并通过构建配置进行适当转换),但我处理了很多文件。。。在调试模式下,大约有20个JS和10多个css…您可能只需要帮助程序返回字符串部分URL,因此在调试中使用“scripts/”,在发布中使用“dist/”。在你的具体情况下可能没有帮助,但我已经看到类似的事情在起作用。你最好阅读这篇文章。使用捆绑包时,非精简版本将在调试模式下使用。在发布模式下,如果不存在对应的-min-file,则文件将缩小。如果一个-min-文件确实存在,它将被使用。你说的concat文件是什么意思?捆绑包可以包括多个文件,例如
bundles.Add(新脚本捆绑包(“~/bundles/myScripts”)。包括(“~/Scripts/myFirstScript.js”、“~/Scripts/mySecondScript.js”)
在调试模式下使用
@Scripts.Render(“~/bundles/myScripts”)
的视图中,将呈现这两个文件。在发布模式下,它们将由框架缩小,但如果
脚本
文件夹还包括
myFirstScript-min.js
mySecondScript-min.js
,则将使用这些缩小的文件。@diegosasw您应该为asp.net核心项目使用
环境
标记帮助程序