【问题标题】:How to bundle different js and css files per controller action/view?如何为每个控制器操作/视图捆绑不同的 js 和 css 文件?
【发布时间】:2018-04-16 21:42:39
【问题描述】:

我有一个站点范围的 js 文件 (site.js),每个请求都会输出。

我在控制器上有 2 个动作:Action1 和 Action2。这些动作中的每一个都有一个视图。每个视图都引用了一个特定于视图的 js(action1.jsaction2.js)。

我想在 Action1 方法执行时将 site.jsaction1.js 捆绑在一起。而当 Action2 方法时,我想将 site.jsaction2.js 捆绑在一起。

捆绑应该在构建时完成。

.Net Core 1.x 可以做到这一点吗?

【问题讨论】:

  • 如果这是一个新项目并且您可以控制它的创建方式,我建议使用webpack 进行捆绑,而不是使用任何.net 捆绑器
  • 这可以通过内置的捆绑器轻松完成。每个捆绑包都特定于其视图并在该视图中引用。您可以设置 gulp.js 文件以在编译时捆绑,以及各种手表。
  • @nurdyguy 你能提供这个过程的链接吗?我所看到的只是捆绑所有内容的基本示例。每个视图捆绑它的示例在哪里?
  • 典型用户最终调用这两个操作的时间是否不同?如果是这样,您真的应该考虑将 all.js 捆绑到一个库中(或者根本不捆绑)。浏览器将缓存.js,因此您的捆绑模型将导致用户必须拉下site.js 两次(对于每个操作)而不是一次。
  • @AngryHacker Metoule 下面的解决方案就是我所指的。我就是这样做的。

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


【解决方案1】:

这是可能的,但是涉及很多琐碎的工作,因为您需要手动描述每个视图的捆绑包。

您需要知道的一切都可以在the official documentation 中找到,但这里是它的要点:

  1. Action1.cshtml

我假设出于调试目的,您希望将这两个文件都包含在您的开发盒中,而您只希望将捆绑包用于生产。在您看来,您添加了以下标签:

<environment names="Development">
    <script src="site.js"></script>
    <script src="action1.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="view1.js" asp-append-version="true"></script>
</environment>

在开发中,您的两个文件将按原样包含,而在生产中,将包含捆绑文件view1.js

asp-append-version 是缓存破坏机制的一部分:它将文件的版本附加到对该文件的每个请求(详细信息here)。

  1. 创建您的捆绑view1.js

创建捆绑包有多种可能性,但它们都围绕bundleconfig.json 文件。最简单的解决方案是使用BuildBundlerMinifier NuGet 包,只需将其添加到项目中即可。

bundleconfig.json 看起来像这样:

[
  {
    "outputFileName": "wwwroot/js/view1.js",
    "inputFiles": [
      "wwwroot/js/site.js",
      "wwwroot/js/action1.js"
    ]
  },
]
  1. 对每个视图重复

这就是事情变得无聊的地方,因为您需要为每个视图重复此操作。

【讨论】:

  • 但是您在哪里指定您指定的捆绑包是针对特定视图的?
  • 捆绑是每次查看还是每次请求都发生一次?
  • 包只是连接在一起的文件的集合(带有额外的处理,例如缩小):包和视图之间没有强链接。主要目的是减少 Web 服务器提供的文件数量。你是唯一知道哪个包对应哪个视图的人。当您构建项目时,捆绑只发生一次。我真的建议您阅读documentation 了解更多信息。
  • 这似乎是一种非常痛苦的捆绑方式。在旧版本的 ASP.NET 中,您指定一个包并将代码放入页面一次,它保证向页面提供正确的脚本。现在我们必须配置它两次,一次在 bundleconfig.json 中,第二次在开发页面中。保持打开状态会丢失实时环境中页面所需的文件。
  • 我同意,这非常痛苦,这就是我现在使用 webpack 的原因。使用 webpack,您可以在视图之外配置一次捆绑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-03-05
相关资源
最近更新 更多