我想用NuGet更新ASP.NET Core中的Bootstrap。我用这个:
Install-Package bootstrap -Version 4.0.0
它确实添加了依赖关系,但是现在如何将其添加到我的项目中呢?本地NuGet依赖项的路径是什么?
我想用NuGet更新ASP.NET Core中的Bootstrap。我用这个:
Install-Package bootstrap -Version 4.0.0
它确实添加了依赖关系,但是现在如何将其添加到我的项目中呢?本地NuGet依赖项的路径是什么?
Answers:
正如其他人已经提到的那样,程序包管理器Bower通常在不依赖繁琐的客户端脚本的应用程序中用于此类依赖,目前正走出困境,并积极建议改用其他解决方案:
因此,尽管您现在仍可以使用它,但是Bootstrap也宣布放弃对其的支持。结果,内置的ASP.NET Core模板正在被缓慢地编辑以远离它。
不幸的是,没有明确的前进道路。这主要是由于Web应用程序正在不断地进一步移动到客户端,这需要复杂的客户端构建系统和许多依赖关系。因此,如果您正在构建类似的东西,那么您可能已经知道如何解决此问题,并且可以扩展现有的构建过程以在其中仅包含Bootstrap和jQuery。
但是,仍然有许多Web应用程序在客户端上并不那么繁重,因为这些Web应用程序仍主要运行在服务器上,因此服务器提供静态视图。Bower以前通过轻松发布客户端依赖项而无需进行太多过程来填补这一点。
在.NET世界中,我们也有NuGet,并且在以前的ASP.NET版本中,我们也可以使用NuGet将依赖项添加到某些客户端依赖项中,因为NuGet只会将内容正确地放入我们的项目中。不幸的是,使用新.csproj
格式和新的NuGet,已安装的软件包位于我们项目的外部,因此我们不能简单地引用它们。
这为我们提供了一些添加依赖项的选项:
这是不是单页应用程序的ASP.NET Core模板当前正在执行的操作。当您使用这些wwwroot
文件夹创建新的应用程序时,该文件夹仅包含一个lib
包含依赖性的文件夹:
如果您仔细查看当前文件,您会发现它们最初是由Bower放置在此处以创建模板的,但是这种情况可能很快就会改变。基本思想是将文件复制到文件夹一次,wwwroot
因此您可以依靠它们。
为此,我们只需遵循Bootstrap的介绍并直接下载编译的文件即可。如下载站点所述,它不包括jQuery,因此我们也需要单独下载;它确实包含 Popper.js,但是如果我们以后选择使用该bootstrap.bundle
文件,我们将这样做。对于jQuery,我们可以简单地从下载站点获得一个“压缩的生产”文件(右键单击链接,然后从菜单中选择“将链接另存为...”)。
这给我们留下了一些文件,这些文件将简单地提取并复制到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或Yarn。在我的示例中,我将使用NPM。
首先,我们需要package.json
为项目创建一个文件,以便我们指定依赖项。为此,我们只需在“添加新项”对话框中执行此操作:
一旦有了它,我们需要对其进行编辑以包括我们的依赖项。它应该看起来像这样:
{
"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.css
和vendor.js.css
被正确创建。因此,我们要做的就是_Layouts.html
再次调整以包含这些文件:
<!-- inside <head> -->
<link rel="stylesheet" href="~/vendor.min.css" />
<!-- at the end of <body> -->
<script src="~/vendor.min.js"></script>
如果我们想更多地进行客户端开发,我们也可以开始使用在此使用的工具。例如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
会对依赖gulp
和gulp-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.css
并vendor.min.js
就像我们以前那样。因此,_Layout.cshtml
像上面那样调整我们的内容之后,我们就可以使用jQuery和Bootstrap了。
虽然Gulp的初始设置比bundleconfig.json
上面的设置复杂一些,但是我们现在已经进入Node-world,并且可以开始使用那里的所有其他炫酷工具。因此可能值得一开始。
尽管这突然变得比仅使用Bower复杂得多,但使用这些新选项也获得了很多控制权。例如,我们现在可以确定文件wwwroot
夹中实际包含的文件以及文件的外观。而且我们还可以用它来使第一移动到客户端开发世界节点至少应有助于有点用的学习曲线。
node -v
,并在nodejs.org上
对此进行研究,似乎LibMan方法通过添加Bootstrap可以最好地满足我的需求。我喜欢它,因为它现在内置于Visual Studio 2017(15.8或更高版本)中,并且具有自己的对话框。
2020年6月11日更新: VS-2019.5默认添加了bootstrap 4.1.3(感谢Harald S.Hanssen的注意)。
VS向项目添加的默认方法使用Bower,但看起来好像正在淘汰。他们在Microsoft的Bower页眉中写道:
通过以下几个链接,可以在Visual Studio中将LibMan与ASP.NET Core结合使用,其中显示了如何使用内置对话框添加库:
在解决方案资源管理器中,右键单击应在其中添加文件的项目文件夹。选择“添加”>“客户端库”。出现“添加客户端库”对话框:[源:Scott Addie 2018 ]
然后,仅对于引导程序(1)选择unpkg,(2)在“ bootstrap @ ..”中键入(3)安装。之后,您只想验证_Layout.cshtml或其他位置中的所有包含内容均正确。它们应该类似于href =“〜/ lib / bootstrap / dist / js / bootstrap ...”)
试试Libman,它像Bower一样简单,您可以将wwwroot / lib /指定为下载文件夹。
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"
]
}
]
}
BS4现在在.NET Core 2.2上可用。确保在SDK 2.2.105 x64安装程序上。我正在运行Visual Studio 2017。到目前为止,对于新的Web应用程序项目来说都不错。
为什么不只使用CDN?除非您需要编辑BS的代码,否则只需引用CDN中的代码。
请参阅此处的BS 4 CDN:
https://www.w3schools.com/bootstrap4/bootstrap_get_started.asp
在页面的底部。