【问题标题】:Bower with Visual Studio Publish使用 Visual Studio 发布的 Bower
【发布时间】:2016-04-03 16:34:31
【问题描述】:

我想在使用 Visual Studio 2015 开发的 MVC 4 应用程序中使用 Bower。我知道当您有一个 MVC 5 项目时,使用 Visual Studio 2015 Update 1,有一个用于 Bower 管理的漂亮 UI,就像 nuget界面。这部分并不是很关键。

我目前正在使用 bower - 我有 npm 和 bower 设置,并且我在解决方案中有 package.json 和 bower.json 文件。保存时,Visual Studio 会自动运行“npm install”,我在 package.json 中有一个安装后步骤来运行“bower install”。

我不想将 bower_components 放入解决方案(或源代码管理)中。我想要的是只保留 json 配置文件,当你保存时,所有依赖项都会被检索。

这一切在开发中都可以正常工作,但是不能右键单击 Web 项目,发布。 Publish 不运行“npm install”,并且不包含未包含在解决方案中的文件(除非它似乎以某种方式与未包含在解决方案中的 nuget 包一起使用)。 “发布 Web”功能是使用 IIS 部署将我的 Web 应用程序部署到生产环境的方式。

如何使 Visual Studio Web Publish 与 Bower 一起使用?

另一种选择 - 我已经看到 Team System Builds 有新的钩子可以运行 gulp 任务,但我不知道你可以以这种方式直接发布到 IIS。

【问题讨论】:

  • 在 mvc5 中不仅仅是发布的 www 文件夹。这意味着,您的凉亭组件不会被发布,因为它不在 www 文件夹中。
  • @SteveKennedy - 我想你是说 MVC5 项目也会存在同样的问题?
  • @SteveKennedy 我认为您正在考虑 MVC6 / ASP.NET 5。MVC4 和 5 没有 wwwroot 概念。

标签: asp.net tfs npm visual-studio-2015 bower


【解决方案1】:

在 ASP.NET Core(即 MVC6)中,Bower 被配置为(在 .bowerrc 文件中)将脚本添加到 wwwroot/lib 而不是 bower_components 文件夹。该内容确实由 Visual Studio 发布。

使用 .a bowerrc 文件的相同方法适用于 MVC4 网络(至少如果您使用的是 Visual Studio 2015)。但是,它也会被检查到版本控制中,因此它可能不是您想要的。

.bowerrc 文件可用于执行各种操作(请参阅http://bower.io/docs/config/)。但是,要让 Bower 将脚本添加到 ~/scripts/lib 中的项目中,您只需添加以下 json:

{
  "directory": "scripts/lib"
}

【讨论】:

  • 我看到了,但我不想要所有这些内容。 bower 包是所有的源文件、构建文件和 dist 文件。你真正想要的只是你正在使用的 dist 文件,所以你需要像 gulp 这样的东西来获取你想要的东西(以及 concat/minify 等)。确实,部署需要像新的 TFS Build 似乎具有的 gulp 或 grunt 的钩子。但是部署具有直接部署到 IIS 站点的良好功能...
  • 在项目构建后事件挂钩中使用 gulp 命令提取你想要的内容怎么样?
【解决方案2】:

您可以使用 gulp 或 grunt 脚本(选择您喜欢的任何内容)将正确的文件从 bower_components 文件夹复制到类似 scripts/lib 的位置,而不是引用/部署完整的 bower_components 文件夹。

然后,您可以将这些文件包含在源代码管理中并随后部署它们。

以下是我用来完成此任务的 grunt 文件:

module.exports = function (grunt) {
    grunt.initConfig({
        pkg: grunt.file.readJSON("package.json"),
        copy: {
            main: {
                files: [
                  {
                      expand: true,
                      flatten: true,
                      src: [
                          'node_modules/vss-sdk/lib/VSS.SDK.js',
                          'node_modules/moment/moment.js',
                          'node_modules/moment-timezone/moment-timezone.js',
                          'node_modules/jquery/dist/jquery.js',
                          'bower_components/datetimepicker/jquery.datetimepicker.js',
                          'bower_components/datetimepicker/jquery.datetimepicker.css',
                      ],
                      dest: 'scripts/lib',
                      filter: 'isFile'
                  }              
                ]
            }
        }
    });

    grunt.loadNpmTasks("grunt-exec");
    grunt.loadNpmTasks("grunt-contrib-copy");
};

【讨论】:

  • 是的,我现在,但我需要它来使用 Visual Studio 中的 Web 发布功能。它还有更多功能,包括通过 http 部署到远程 IIS 服务器。
  • 我并不是说你不应该使用 Web Deploy。我建议您将特定文件从您的 bower 目录移动到项目的源代码树中,并将这些特定文件包含在您的项目中。然后将使用 Web Deploy 部署它们。
  • 我明白了。我意识到我可以做到这一点,但我特别想避免这种情况。我不希望解决方案或源代码控制中的 bower 组件,只希望 bower.json 引用必要的组件。抱歉,如果不清楚。编辑 - 我认为你的建议有点不同,你建议只在解决方案中保留“dist”文件,它们是由 gulp 任务放在那里的?
  • 是的!这就是我的建议。您不应该包含整个 bower_components 文件夹。那会很乱。相反,您选择所需的文件并将其复制到受源代码控制的目标文件夹。 Grunt 和 Gulp 可以做到这一点。上面的例子是一个 Grunt 脚本。
  • 在未来,我正在尝试这个,文件 (jquery.mask.js) 被复制到我的脚本文件夹中(从 bower_components 子文件夹),但是 dang 发布工具不会将其复制到“发布到”(如果您愿意的话)目录。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多