如何在ASP.NET Core中使用Bootstrap 4


111

我想用NuGet更新ASP.NET Core中的Bootstrap。我用这个:

Install-Package bootstrap -Version 4.0.0

它确实添加了依赖关系,但是现在如何将其添加到我的项目中呢?本地NuGet依赖项的路径是什么?

已安装的NuGet依赖项


3
BS4不应该支持Bower(来源:getbootstrap.com/docs/4.0/migration/#breaking
Klooven

用bootstrap@4.0.0替换bootstrap@4.0.0-beta.3:stackoverflow.com/questions/47985337/…–
mrapi

1
目前,这应该是公认的答案,最容易使用Libman的方法:stackoverflow.com/a/53012140/578552
rfcdejong 19/11/25

NUGET现在兼容4.4.1版本。
DiegoVenâncio

Answers:


222

正如其他人已经提到的那样,程序包管理器Bower通常在不依赖繁琐的客户端脚本的应用程序中用于此类依赖,目前正走出困境,并积极建议改用其他解决方案:

..psst!在维护Bower的同时,我们建议为新的前端项目使用yarnwebpack

因此,尽管您现在仍可以使用它,但是Bootstrap也宣布放弃对其的支持。结果,内置的ASP.NET Core模板正在被缓慢地编辑以远离它。

不幸的是,没有明确的前进道路。这主要是由于Web应用程序正在不断地进一步移动到客户端,这需要复杂的客户端构建系统和许多依赖关系。因此,如果您正在构建类似的东西,那么您可能已经知道如何解决此问题,并且可以扩展现有的构建过程以在其中仅包含Bootstrap和jQuery。

但是,仍然有许多Web应用程序在客户端上并不那么繁重,因为这些Web应用程序仍主要运行在服务器上,因此服务器提供静态视图。Bower以前通过轻松发布客户端依赖项而无需进行太多过程来填补这一点。

在.NET世界中,我们也有NuGet,并且在以前的ASP.NET版本中,我们也可以使用NuGet将依赖项添加到某些客户端依赖项中,因为NuGet只会将内容正确地放入我们的项目中。不幸的是,使用新.csproj格式和新的NuGet,已安装的软件包位于我们项目的外部,因此我们不能简单地引用它们。

这为我们提供了一些添加依赖项的选项:

一次性安装

这是不是单页应用程序的ASP.NET Core模板当前正在执行的操作。当您使用这些wwwroot文件夹创建新的应用程序时,该文件夹仅包含一个lib包含依赖性的文件夹:

wwwroot文件夹包含具有静态依赖项的lib文件夹

如果您仔细查看当前文件,您会发现它们最初是由Bower放置在此处以创建模板的,但是这种情况可能很快就会改变。基本思想是将文件复制到文件夹一次wwwroot因此您可以依靠它们。

为此,我们只需遵循Bootstrap的介绍并直接下载编译的文件即可。如下载站点所述,它不包括jQuery,因此我们也需要单独下载;它确实包含 Popper.js,但是如果我们以后选择使用该bootstrap.bundle文件,我们将这样做。对于jQuery,我们可以简单地从下载站点获得一个“压缩的生产”文件(右键单击链接,然后从菜单中选择“将链接另存为...”)。

这给我们留下了一些文件,这些文件将简单地提取并复制到wwwroot文件夹中。我们还可以创建一个lib文件夹,以使它们更清楚地表明它们是外部依赖项:

wwwroot文件夹包含带有我们已安装依赖项的lib文件夹

这就是我们所需要的,所以现在我们只需要调整_Layout.cshtml文件以包括那些依赖项即可。为此,我们将以下代码块添加到<head>

<environment include="Development">
    <link rel="stylesheet" href="~/lib/css/bootstrap.css" />
</environment>
<environment exclude="Development">
    <link rel="stylesheet" href="~/lib/css/bootstrap.min.css" />
</environment>

在下面的末尾有以下代码块<body>

<environment include="Development">
    <script src="~/lib/js/jquery-3.3.1.js"></script>
    <script src="~/lib/js/bootstrap.bundle.js"></script>
</environment>
<environment exclude="Development">
    <script src="~/lib/js/jquery-3.3.1.min.js"></script>
    <script src="~/lib/js/bootstrap.bundle.min.js"></script>
</environment>

您还可以仅包括缩小版本,并在<environment>此处跳过标记帮助器以使其变得更简单。但这就是您保持入门所需要做的。

来自NPM的依赖

如果您想保持依赖关系的更新,更现代的方法是从NPM软件包存储库中获取依赖关系。您可以为此使用NPM或Yarn。在我的示例中,我将使用NPM。

首先,我们需要package.json为项目创建一个文件,以便我们指定依赖项。为此,我们只需在“添加新项”对话框中执行此操作:

添加新项:npm配置文件

一旦有了它,我们需要对其进行编辑以包括我们的依赖项。它应该看起来像这样:

{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "devDependencies": {
    "bootstrap": "4.0.0",
    "jquery": "3.3.1",
    "popper.js": "1.12.9"
  }
}

通过保存,Visual Studio将已经运行NPM为我们安装依赖项。它们将被安装到node_modules文件夹中。因此,剩下要做的就是将文件从那里放到我们的wwwroot文件夹中。有几种方法可以做到这一点:

bundleconfig.json 用于捆绑和缩小

bundleconfig.json文档所述,我们可以使用多种方法之一来使用a 进行捆绑和最小化。一种非常简单的方法是简单地使用BuildBundlerMinifier NuGet软件包,该软件包会自动为此设置构建任务。

安装该软件包后,我们需要bundleconfig.json在项目的根目录中创建一个具有以下内容的:

[
  {
    "outputFileName": "wwwroot/vendor.min.css",
    "inputFiles": [
      "node_modules/bootstrap/dist/css/bootstrap.min.css"
    ],
    "minify": { "enabled": false }
  },
  {
    "outputFileName": "wwwroot/vendor.min.js",
    "inputFiles": [
      "node_modules/jquery/dist/jquery.min.js",
      "node_modules/popper.js/dist/umd/popper.min.js",
      "node_modules/bootstrap/dist/js/bootstrap.min.js"
    ],
    "minify": { "enabled": false }
  }
]

这基本上配置了将哪些文件组合成什么文件。并且在构建时,我们可以看到vendor.min.cssvendor.js.css被正确创建。因此,我们要做的就是_Layouts.html再次调整以包含这些文件:

<!-- inside <head> -->
<link rel="stylesheet" href="~/vendor.min.css" />

<!-- at the end of <body> -->
<script src="~/vendor.min.js"></script>

使用任务管理器(例如Gulp)

如果我们想更多地进行客户端开发,我们也可以开始使用在此使用的工具。例如Webpack,它是用于所有内容的非常常用的构建工具。但是我们也可以从一个简单的任务管理器(如Gulp)开始,自己做一些必要的步骤。

为此,我们将a添加gulpfile.js到项目根目录中,其中包含以下内容:

const gulp = require('gulp');
const concat = require('gulp-concat');

const vendorStyles = [
    "node_modules/bootstrap/dist/css/bootstrap.min.css"
];
const vendorScripts = [
    "node_modules/jquery/dist/jquery.min.js",
    "node_modules/popper.js/dist/umd/popper.min.js",
    "node_modules/bootstrap/dist/js/bootstrap.min.js",
];

gulp.task('build-vendor-css', () => {
    return gulp.src(vendorStyles)
        .pipe(concat('vendor.min.css'))
        .pipe(gulp.dest('wwwroot'));
});

gulp.task('build-vendor-js', () => {
    return gulp.src(vendorScripts)
        .pipe(concat('vendor.min.js'))
        .pipe(gulp.dest('wwwroot'));
});

gulp.task('build-vendor', gulp.parallel('build-vendor-css', 'build-vendor-js'));

gulp.task('default', gulp.series('build-vendor'));

现在,我们还需要调整我们package.json会对依赖gulpgulp-concat

{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "devDependencies": {
    "bootstrap": "4.0.0",
    "gulp": "^4.0.2",
    "gulp-concat": "^2.6.1",
    "jquery": "3.3.1",
    "popper.js": "1.12.9"
  }
}

最后,我们编辑.csproj以添加以下任务,以确保在构建项目时运行Gulp任务:

<Target Name="RunGulp" BeforeTargets="Build">
  <Exec Command="node_modules\.bin\gulp.cmd" />
</Target>

现在,当我们建立的default咕嘟咕嘟任务运行时,它运行的build-vendor任务,然后我们建立vendor.min.cssvendor.min.js就像我们以前那样。因此,_Layout.cshtml像上面那样调整我们的内容之后,我们就可以使用jQuery和Bootstrap了。

虽然Gulp的初始设置比bundleconfig.json上面的设置复杂一些,但是我们现在已经进入Node-world,并且可以开始使用那里的所有其他炫酷工具。因此可能值得一开始。

结论

尽管这突然变得比仅使用Bower复杂得多,但使用这些新选项也获得了很多控制权。例如,我们现在可以确定文件wwwroot夹中实际包含的文件以及文件的外观。而且我们还可以用它来使第一移动到客户端开发世界节点至少应有助于有点用的学习曲线。


1
使用npm方法时,我得到了类似“未捕获的SyntaxError:意外的令牌导出”之类的错误。为了解决这个问题,我切换到popper.js umd文件“ node_modules / popper.js / dist / umd / popper.min.js”。否则,我所见过的最好的答案之一就是谢谢。
詹姆斯·布雷克

2
@user听起来好像您正在使用旧版本的Node。您可以通过运行来查看版本node -v,并在nodejs.org上

62
大声笑。我必须笑,否则我会哭。使用Visual Studio的工具支持进行十七年的.Net开发,这已经到了吗?就个人而言,我看不出这是如何向前发展的。如果仅需将大量Bootstrap样式添加到Web项目中就需要花费大量工作,则说明出现了严重错误。
camainc

11
@camainc如果有的话,则将其归咎于JavaScript生态系统的开发。这真的与.NET或Visual Studio完全无关。简单的解决方案仍然是手动下载文件,然后将其添加到您的Web根目录中。这也是多年来的工作原理。–而且,就其价值而言,Microsoft正在开发新的VS工具,以使此过程更简单(且可更新)。

3
@ ozzy432836,我知道这不是引导程序问题,我从未说过。这是一个普遍的发展问题,每个人似乎都在追求下一个新框架。我已经看到了职业上的许多变化,但是没有像过去几年围绕Javascript发生的事情那样变化。看着开发社区不断推出新的框架真是太疯狂了。至于JS是否是前进的道路,评审团仍在此问题上,尤其是WASM和Blazor等项目正在酝酿中。
camainc

56

对此进行研究,似乎LibMan方法通过添加Bootstrap可以最好地满足我的需求。我喜欢它,因为它现在内置于Visual Studio 2017(15.8或更高版本)中,并且具有自己的对话框。

2020年6月11日更新: VS-2019.5默认添加了bootstrap 4.1.3(感谢Harald S.Hanssen的注意)。

VS向项目添加的默认方法使用Bower,但看起来好像正在淘汰。他们在Microsoft的Bower页眉中写道: Bower仅维护。建议使用LibManager

通过以下几个链接,可以在Visual Studio中将LibMan与ASP.NET Core结合使用,其中显示了如何使用内置对话框添加库:

在解决方案资源管理器中,右键单击应在其中添加文件的项目文件夹。选择“添加”>“客户端库”。出现“添加客户端库”对话框:[源:Scott Addie 2018 ]

在此处输入图片说明

然后,仅对于引导程序(1)选择unpkg,(2)在“ bootstrap @ ..”中键入(3)安装。之后,您只想验证_Layout.cshtml或其他位置中的所有包含内容均正确。它们应该类似于href =“〜/ lib / bootstrap / dist / js / bootstrap ...”


1
我有VS 4.7.02558(社区版),这对我来说是最简单的选择。我将其用于为MS 70-486(MVC)考试而创建的实践项目中,所以我无法回答这对于即将投入生产的项目的有效性。
Ed Gibbs

2
对我来说,这也是使用MS STANDARD TOOL进行安装的最简单方法。在您发布的提示中-将Provider更改为unpkg,输入bootstrap @ 4。,我能够安装。Libman确实不直观(在我的情况下,在显示软件包之前,我还必须在4点之后输入。(点)(我认为libman在我的环境中
不起作用

2
提醒一下:如果您在CdnJS上寻找Bootstrap,请注意,它的名字最初是叫twitter-bootstrap。
D.Rosado

1
在Visual Studio 2019(最新发布于2020年6月11日)中-创建了libman文件,但没有看到libman弹出窗口。
Harald S. Hanssen

1
我已经在多个项目上测试过LibMan,这确实是可行的方法。太糟糕了,GUI无法正常工作,但是经过几次尝试,它很容易使用。
Harald S. Hanssen

18

试试Libman,它像Bower一样简单,您可以将wwwroot / lib /指定为下载文件夹。


1
尚未在VS2017版本中发布:更新:2018年5月24日–看来LibMan并未进入15.7的最终版本。在15.8.x的预览版中
kristianp '18

1
最终15.8版似乎已经发布了。
柯克·拉金

它现在在VS2017 V 15.8中可用,并且比公认的答案更简单的方法
Jemsworld,

10

对我来说,诀窍是:

1)右键单击wwwroot>添加>客户端库

2)在搜索框中输入“ bootstrap”

3)选择“选择特定文件”

4)向下滚动并选择一个文件夹。就我而言,我选择了“ twitter-bootstrap”

5)检查“ css”和“ js”

6)点击“安装”。

几秒钟后,我将所有这些都放到了wwwroot文件夹中。对要添加的所有客户端软件包执行相同的操作。


6

Libman似乎是现在Microsoft首选的工具。它已集成在Visual Studio 2017(15.8)中。

本文介绍了如何使用它,甚至如何设置由构建过程执行的还原。

Bootstrap的文档告诉您项目中需要哪些文件。

以下示例应作为libman.json的配置。

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
  {
    "library": "twitter-bootstrap@4.2.1",
    "destination": "wwwroot/lib/bootstrap",
    "files": [
    "js/bootstrap.bundle.js",
    "css/bootstrap.min.css"
    ]
  },
  {
    "library": "jquery@3.3.1",
    "destination": "wwwroot/lib/jquery",
    "files": [
      "jquery.min.js"
    ]
  }
]

}


谢谢,我一直在学习Pro ASP.NET Core MVC 2书,该书告诉我使用现在已经过时的Bower。在意识到您可以右键单击项目并选择“添加”->“客户端库”之前,我四处搜索。并且使用libman。这一切都内置的。
TxRegex

4

我们在asp.net核心中使用bootstrap 4,但是使用“ Package Installer”扩展名引用了“ npm”中的库,发现它比Java / CSS库的Nuget更好。

然后,我们使用“ Bundler&Minifier”扩展名将要分发的相关文件(从位于项目外部的npm node_modules文件夹)复制到wwwroot中,以进行开发/部署。


4

不幸的是,使用NuGet在.NET Core项目上安装Bootstrap(或大多数其他JavaScript / CSS框架)会很困难。如果您查看NuGet安装,它会告诉您它不兼容:

在此处输入图片说明

如果您必须知道本地软件包依赖项在哪里,则它们现在位于本地配置文件目录中。即%userprofile%\.nuget\packages\bootstrap\4.0.0\content\Scripts

但是,我建议切换到npm或bower-就像Saineshwar的回答一样。


2

BS4现在在.NET Core 2.2上可用。确保在SDK 2.2.105 x64安装程序上。我正在运行Visual Studio 2017。到目前为止,对于新的Web应用程序项目来说都不错。


2

为什么不只使用CDN?除非您需要编辑BS的代码,否则只需引用CDN中的代码。

请参阅此处的BS 4 CDN:

https://www.w3schools.com/bootstrap4/bootstrap_get_started.asp

在页面的底部。


1
使用CDN会增加运行时依赖性。因此,如果CDN断开,您的站点也将断开。这是一个安全问题,因为控制CDN的任何人都可以更改流行的文件并将脚本注入您的站点。这也是一个隐私问题,因为用户的浏览器从第三方服务器而不是您自己的服务器请求文件。
TxRegex

3
@TxRegex在某个阶段实际上建议将引用指向CDN,而不是Web应用程序的服务器。因为用户的浏览器在浏览其他网站时可能已经缓存了Bootstrap之类的流行库。但无论如何...
joedotnot

0

使用nmp配置文件(将其添加到您的Web项目中),然后以与使用bower.json相同的方式添加所需的软件包并保存。Visual Studio将下载并安装它。您将在项目的nmp节点下找到该软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.