【问题标题】:How do I unbundle a bundle with gulp MVC 6 for debugging?如何使用 gulp MVC 6 解绑捆绑包以进行调试?
【发布时间】:2016-04-15 06:41:53
【问题描述】:

我有一个相当大的 Angular 应用程序,其中有很多 javascript 文件分散在我的项目的树中。这是一个 MVC 5 项目,我使用 these 指令将其转换为 MVC 6 以使用 Browserify。一切似乎都很好,除了我不需要在我的开发版本中使用包,而是分别包含每个脚本文件。 These articles 显示了根据环境变量用静态标记替换捆绑包的略有不同的方法,但我必须为调试版本单独指定每个文件。有什么方法可以动态指定要包含的文件吗?

【问题讨论】:

  • 为什么要动态包含某些文件?你需要所有的js文件。仪式?
  • 我想包含所有文件,我只是不想调试一个捆绑的文件。我想在生产中打包和缩小,但在开发中使用单个文件,就像旧的打包器一样。

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


【解决方案1】:

你应该使用environment标签助手。

环境助手允许我们根据环境有条件地渲染脚本。 (Minified-Bundled 版本 vs All Un 缩小版本)

<environment names="Development">
    <script src="~/lib/jquery/dist/jquery.js"></script>
    <script src="~/js/ScriptForPage1.js"></script>
    <script src="~/js/SomeOtherScript.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
                asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                asp-fallback-test="window.jQuery">
    </script>         
    <script src="~/js/CombinedVersionOfAllScripts.min.js" asp-file-version="true"></script>
</environment>

确保您已在Configure() 方法内(在Startup.cs 内)调用了UseStaticFiles() 方法。此扩展方法可以实现静态文件服务,包括 js 文件、css 文件等。

查看this post 了解如何使用 gulp 缩小 js 文件


如果有 100 多个 js 文件,并且您不希望为每个脚本文件添加一个脚本标签,您可以考虑将所有文件捆绑到一个文件中并使用它。

为此,将新的 gulp 任务添加到您的 gulpfile.js

paths.bundledJsDest = paths.webroot + "js/bundledSingleFile.js";

gulp.task("bundleAllScriptsToOne", function () {
    gulp.src([paths.js, "!" + paths.minJs, "!" + paths.bundledJsDest])
        .pipe(concat(paths.bundledJsDest))
        .pipe(gulp.dest("."));
});

现在打开任务运行器(View->Other Windows->Task Runner Explorer),右键单击我们创建的这个新任务(bundleAllScriptsToOne strong>) 并选择运行

这将生成一个名为bundledSingleFile.js 的新js 文件。它的内容将是来自 js 文件夹内所有其他脚本文件的脚本内容(缩小的除外)。您可以在开发环境中的布局中包含此单个文件。您可以在生产环境中使用缩小的(由另一个 gulp 任务生成)。

<environment names="Development">
    <script src="~/js/bundledSingleFile.js"></script>
</environment>
<environment names="Staging,Production">
    <script src="~/js/yourSite.min.js" asp-file-version="true"></script>
</environment>

如果您希望从另一个文件夹(或子文件夹)获取所有脚本,只需更新您传递给gulp.src()的路径即可

如果您不希望每次都手动运行此 gulp 任务,您可以选择 Bindings -&gt; Before build 以便在您每次构建项目时自动运行该特定 gulp 任务。

【讨论】:

  • 对,但在这些情况下,我必须为每个单独的文件命名。假设我有一个名为“Scripts”的文件夹,其中包含 100 个 js 文件。为此编写开发标签并不是很有趣。
  • 是的。但是您可以从解决方案资源管理器中将文件拖放到您的布局/视图中,VS 将为您创建脚本标签。
  • 对于非常大的文件集,这非常麻烦,尤其是在添加或删除文件时。有什么我可以使用正则表达式或通配符的吗?例如:@Bundle.Render("~Scripts/**/*.js") 并利用一些编程过程?
  • 您可以将所有这些捆绑到一个文件中并使用它。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
相关资源
最近更新 更多