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

NUGETによってバージョン4.4.1互換になりました。
ディエゴベナンシオ

回答:


222

他の人がすでに述べたように、重いクライアント側スクリプトに依存しないアプリケーションでこのような依存関係に通常使用されるパッケージマネージャーBowerは、他のソリューションに移行することを積極的に推奨しています。

..psst!Bowerのメンテナンス中は、新しいフロントエンドプロジェクトにはウェブパックをお勧めします!

そのため、今でも使用できますが、Bootstrapはサポートを終了することも発表しています。その結果、組み込みのASP.NET Coreテンプレートは徐々に編集され、そこから遠ざかっています。

残念ながら、明確な道はありません。これは主に、Webアプリケーションがクライアント側に継続的に移行しており、複雑なクライアント側のビルドシステムと多くの依存関係が必要であることによるものです。したがって、そのようなものを構築している場合は、これを解決する方法をすでに知っている可能性があり、既存のビルドプロセスを拡張して、そこにBootstrapとjQueryを含めることもできます。

しかし、クライアント側ではそれほど重くない多くの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の場合、ダウンロードサイトから1つの「圧縮された本番」ファイルを取得するだけです(リンクを右クリックして、メニューから[名前を付けてリンクを保存...]を選択します)。

これにより、いくつかのファイルが残ります。これらのファイルは単純に抽出され、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または糸を使用できます。この例では、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説明されいるようにさまざまな方法の1つを使用して、をバンドルおよびミニファイするために使用できます。非常に簡単な方法は、このためのビルドタスクを自動的に設定する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>

Gulpなどのタスクマネージャを使用する

クライアント側の開発にもう少し移動したい場合は、そこで使用するツールを使用することもできます。たとえば、Webpackは、非常に一般的に使用されるビルドツールであり、実際にすべてのものに使用されます。しかし、Gulpのような単純なタスクマネージャーから始めて、必要ないくつかの手順を自分で実行することもできます。

そのためにgulpfile.js、次の内容でa をプロジェクトルートに追加します。

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>

これで、ビルドするとdefaultGulpタスクが実行され、タスクが実行されます。これによりbuild-vendor、以前vendor.min.cssvendor.min.js同じようにビルドされます。_Layout.cshtml上記のように調整したら、jQueryとBootstrapを利用できます。

Gulpの初期設定はbundleconfig.json上記のものより少し複雑ですが、これでNode-worldに入り、他のすべてのクールなツールを利用できるようになりました。だから、これから始める価値があるかもしれません。

結論

これは突然Bowerを使用するよりもはるかに複雑になりましたが、これらの新しいオプションを使用して多くの制御を得ることができます。たとえば、wwwrootフォルダに実際に含まれるファイルと、それらがどのように見えるかを決定できます。また、これを使用して、少なくとも学習曲線で少しは役立つはずのNodeを使用して、クライアント側開発の世界に最初に移動することもできます。


1
npmメソッドを使用すると、「Uncaught SyntaxError:Unexpected token export」のようなエラーが返されました。これを修正するために、私はpopper.js umdファイル「node_modules / popper.js / dist / umd / popper.min.js」に切り替えました。それ以外の場合、私がスタックでこれまでに見た中で最高の答えの1つです。ありがとう。
James Blake

2
@user非常に古いバージョンのNodeを使用しているように聞こえます。あなたが実行してバージョンを確認することができnode -v、現在のバージョンを取得こっちnodejs.orgに
突く

62
笑。笑わないと泣かない。Visual Studioのツールサポートを使用した.Net開発の17年、そしてこれは実現しましたか?個人的には、これがどのように前進しているかはわかりません。BootstrapスタイリングをWebプロジェクトに追加するだけでこれだけの作業が必要な場合は、何かが大幅に間違っています。
camainc 2018

11
@camaincどちらかといえば、JavaScriptエコシステムの開発に責任がある。これは、.NETやVisual Studioとはまったく関係ありません。単純な解決策は、ファイルを手動でダウンロードして、Webルートに追加することです。それは、それが何年も前にも機能していた方法です。–そして、価値のあるものとして、マイクロソフトは、このプロセスをより簡単に(そして更新可能に)するための新しいVSツールに取り組んでいます。
突く

3
@ ozzy432836、それはブートストラップの問題ではないことを知っています。それは、誰もが次の新しいフレームワークを追いかけているように見える一般的な開発問題です。私はキャリアの中で多くの変化を見てきましたが、Javascriptを取り巻く過去2年間に起こったようなことは何もありません。開発コミュニティが次々と新しいフレームワークを作り出すのを見ているのは絶対に骨の折れることです。JSが前進するかどうかに関しては、特にWASMとBlazorのようなプロジェクトが地平線上にある場合、陪審はまだその問題に賛成です。
camainc 2018

56

これを見ると、Bootstrapを追加することで、LibManアプローチが私のニーズに最適に機能するようです。Visual Studio 2017(15.8以降)に組み込まれ、独自のダイアログボックスがあるため、気に入っています。

2020年6月11日更新:ブートストラップ4.1.3がVS-2019.5にデフォルトで追加されました(通知についてはHarald S. Hanssenに感謝します)。

VSがプロジェクトに追加するデフォルトの方法はBowerを使用しますが、途中であるように見えます。マイクロソフトのバウアーページのヘッダーには次のように書かれています。 Bowerのみがメンテナンスされています.LibManagerを使用することをお勧めします

2つのリンクをたどると、Visual StudioのASP.NET CoreでLibMan使用できます。ここで、組み込みダイアログを使用してlibを追加する方法が示されています。

ソリューションエクスプローラーで、ファイルを追加するプロジェクトフォルダーを右クリックします。「追加」>「クライアント側ライブラリ」を選択します。[クライアント側ライブラリの追加]ダイアログが表示されます:[ソース:Scott Addie 2018 ]

ここに画像の説明を入力してください

次に、ブートストラップの場合は、(1)unpkgを選択し、(2)「bootstrap @ ..」と入力します(3)インストール。この後、_Layout.cshtml内のすべてのインクルードまたは他の場所が正しいことを確認したいだけです。彼らのようなものでなければなりませんのhref = "〜/ libに/ストラップ/ DIST / JS /ブートストラップ..."


1
私はVS 4.7.02558(コミュニティエディション)を持っていますが、これが私にとって最も簡単なオプションでした。私は、MS 70-486(MVC)試験の勉強用に作成された実際のプロジェクトでそれを使用したので、本番に向かうプロジェクトにこれがどれほど効果的であるかについては答えられません。
Ed Gibbs

2
私にとっても、これはMS STANDARD TOOLを使用してコンポーネントをインストールする最も簡単な方法でした。あなたの投稿のヒント-プロバイダーをunpkgに変更し、bootstrap @ 4と入力します。インストールできました。。。Libmanは(私はlibmanが私の環境で動作していない、と思った)パッケージが示された前に(私の場合、私は、4の後(ポイント)を入力することもなかった、本当に直感的ではありません
FredyWenger

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

1
これは、15.8の最終リリースでリリースされたようです。
カークラーキン、

それは現在VS2017 V 15.8で利用可能であり、受け入れられた回答よりもはるかに単純なアプローチ
Jemsworld

10

私にとってのトリックは何ですか:

1)wwwrootを右クリック>追加>クライアント側ライブラリ

2)検索ボックスに「ブートストラップ」と入力した

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"
    ]
  }
]

}


おかげで、私は現在廃止されているBowerを使用するように指示するPro ASP.NET Core MVC 2の本を続けていました。プロジェクトを右クリックして[追加]-> [クライアント側のライブラリ]を選択するだけでよいことに気づく前に、しばらく探してみました。そして、それはlibmanを使用します。すべてが組み込まれています
。– TxRegex

4

私たちはasp.netコアでブートストラップ4を使用していますが、「パッケージインストーラー」拡張機能を使用して「npm」からライブラリを参照しており、これはJavaScript / 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

ただし、Saineshwarの回答のように、npmまたはbowerに切り替えることをお勧めします。


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のある段階では、WebアプリケーションのサーバーではなくCDNを参照することが実際に推奨されました。ユーザーのブラウザは、他のサイトを閲覧している間に、Bootstrapなどの人気のあるライブラリをすでにキャッシュしている可能性が高いためです。しかし、何でも...
joedotnot

0

nmp構成ファイルを使用(Webプロジェクトに追加)し、bower.jsonを使用して保存したのと同じ方法で必要なパッケージを追加して保存します。Visual Studioがダウンロードしてインストールします。パッケージはプロジェクトのnmpノードの下にあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.