ASP.NET Core'da Bootstrap 4 nasıl kullanılır


112

NuGet ile ASP.NET Core'da Bootstrap'i güncellemek istiyorum. Bunu kullandım:

Install-Package bootstrap -Version 4.0.0

Bağımlılıkları ekledi ama şimdi projeme nasıl ekleyebilirim? Yerel NuGet bağımlılıklarının yolu nedir?

Yüklü NuGet bağımlılıkları


3
BS4, Bower desteğine sahip olmamalı (kaynak: getbootstrap.com/docs/4.0/migration/#breaking )
Klooven

Bootstrap@4.0.0-beta.3'ü bootstrap@4.0.0 ile değiştirin: stackoverflow.com/questions/47985337/…
mrapi

1
Şu anda bu kabul edilen cevap olmalı,
Libman'ı

Sürüm 4.4.1 şimdi NUGET ile uyumludur.
Diego Venâncio

Yanıtlar:


223

Daha önce de belirtildiği gibi, paket yöneticisi Bower gibi, genellikle istemci tarafı komut dosyalarına dayanmayan uygulamalarda bu gibi bağımlılıklar için kullanılan , çıkış yolunda ve aktif olarak diğer çözümlere geçmeyi tavsiye ediyor:

..psst! Bower bakımı yapılırken, iplik ve yapılırken , yeni ön uç projeler için web paketi !

Öyleyse, şu anda hala kullanabilseniz de, Bootstrap ayrıca bunun için desteği bırakacağını . Sonuç olarak, yerleşik ASP.NET Core şablonları da bundan uzaklaşmak için yavaşça düzenleniyor.

Ne yazık ki, ileriye dönük net bir yol yok. Bunun nedeni, web uygulamalarının sürekli olarak istemci tarafına doğru ilerlemesi, karmaşık istemci tarafı oluşturma sistemleri ve birçok bağımlılık gerektirmesidir. Öyleyse, böyle bir şey inşa ediyorsanız, bunu nasıl çözeceğinizi zaten biliyor olabilirsiniz ve mevcut inşa sürecinizi sadece Bootstrap ve jQuery'yi de içerecek şekilde genişletebilirsiniz.

Ancak, istemci tarafında o kadar ağır olmayan, uygulamanın hala esas olarak sunucuda çalıştığı ve sonuç olarak sunucunun statik görünümler sunduğu birçok web uygulaması var. Bower daha önce bunu, çok fazla işlem olmadan yalnızca istemci tarafı bağımlılıklarını yayınlamayı kolaylaştırarak doldurdu.

. Maalesef yenisiyle.csproj biçim ve yeni NuGet ile, yüklü paketler projemizin dışında yer almaktadır, bu nedenle bunlara basitçe başvuramayız.

Bu bize bağımlılıklarımızı nasıl ekleyeceğimiz konusunda birkaç seçenek bırakır:

Tek seferlik kurulum

Tek sayfalı uygulamalar olmayan ASP.NET Core şablonlarının şu anda yaptığı şey budur. Bunları yeni bir uygulama oluşturmak için kullandığınızda, wwwrootklasör yalnızca libbağımlılıkları içeren bir klasör içerir:

wwwroot klasörü statik bağımlılıkları olan lib klasörü içeriyor

Şu anda dosyalara yakından bakarsanız, şablonun oluşturulması için oraya Bower ile yerleştirildiklerini görebilirsiniz, ancak bunun yakında değişmesi muhtemeldir. Temel fikir, dosyaların bir kez kopyalanmasıdır .wwwroot klasöre böylece onlara güvenebilirsiniz.

Bunu yapmak için, Bootstrap'in tanıtımını takip edebilir ve derlenen dosyaları doğrudan indirebiliriz . İndirme sitesinde belirtildiği gibi, buna jQuery dahil değildir , bu yüzden onu da ayrıca indirmemiz gerekir; o içermiyor Popper.js biz kullanmayı tercih ederseniz olsa bootstrap.bundledosyayı daha sonra -ki biz yapacağız. JQuery için, indirme sitesinden tek bir "sıkıştırılmış, üretim" dosyası alabiliriz (bağlantıya sağ tıklayın ve menüden "Bağlantıyı farklı kaydet ..." seçeneğini seçin).

Bu, bize basitçe ayıklayıp wwwrootklasöre kopyalayacak birkaç dosya bırakır . Ayrıca lib, bunların harici bağımlılıklar olduğunu daha net hale getirmek için bir klasör oluşturabiliriz:

wwwroot klasörü, yüklü bağımlılıklarımızı içeren lib klasörünü içerir

Tek ihtiyacımız olan bu, bu yüzden şimdi _Layout.cshtmldosyamızı bu bağımlılıkları içerecek şekilde ayarlamamız gerekiyor . Bunun için aşağıdaki bloğu ekliyoruz <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>

Ve en sonunda aşağıdaki blok <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>

Ayrıca küçültülmüş sürümleri dahil edebilir ve <environment>biraz daha basit hale getirmek için buradaki etiket yardımcılarını atlayabilirsiniz . Ama başlamanız için yapmanız gereken tek şey bu.

NPM'den bağımlılıklar

Daha modern yol, bağımlılıklarınızı güncel tutmak istiyorsanız, bağımlılıkları NPM paket deposundan almak olacaktır. Bunun için NPM veya İplik kullanabilirsiniz; benim örneğimde NPM kullanacağım.

Başlamak package.jsoniçin, bağımlılıklarımızı belirtebilmemiz için projemiz için bir dosya oluşturmamız gerekiyor . Bunu yapmak için, bunu "Yeni Öğe Ekle" iletişim kutusundan yapıyoruz:

Yeni Öğe Ekle: npm Yapılandırma dosyası

Buna sahip olduğumuzda, bağımlılıklarımızı içerecek şekilde düzenlememiz gerekir. Bunun gibi bir şey görünmeli:

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

Kaydederek, Visual Studio bağımlılıkları bizim için yüklemek için zaten NPM'yi çalıştıracaktır. node_modulesKlasöre yüklenecekler . Öyleyse yapılacak şey, dosyaları oradan wwwrootklasörümüze almak. Bunu yapmak için birkaç seçenek var:

bundleconfig.json paketleme ve küçültme için

Belgelerdebundleconfig.json açıklandığı gibi, paket ve küçültme için a tüketmenin çeşitli yollarından birini kullanabiliriz . Çok kolay bir yol, bunun için otomatik olarak bir derleme görevi ayarlayan BuildBundlerMinifier NuGet paketini kullanmaktır .

Bu paketi kurduktan sonra bundleconfig.json, projenin kökünde aşağıdaki içeriklerle bir oluşturmamız gerekiyor :

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

Bu temelde hangi dosyaların neyle birleştirileceğini yapılandırır. Ve inşa ettiğimizde, vendor.min.cssve vendor.js.cssdoğru yaratıldığını görebiliriz . Bu yüzden tek yapmamız gereken _Layouts.html, bu dosyaları içerecek şekilde yeniden ayarlamak :

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

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

Gulp gibi bir görev yöneticisi kullanmak

Biraz daha istemci tarafı geliştirmeye geçmek istersek, orada kullanacağımız araçları da kullanmaya başlayabiliriz. Örneğin , gerçekten her şey için çok yaygın olarak kullanılan bir oluşturma aracı olan Webpack . Ancak Gulp gibi daha basit bir görev yöneticisiyle başlayabilir ve gerekli birkaç adımı kendimiz yapabiliriz.

Bunun için gulpfile.jsproje kökümüze aşağıdaki içeriklerle a ekliyoruz :

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'));

Şimdi, ayrıca package.jsonbağımlılıklarımızı ayarlamamız gerekiyor gulpve 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"
  }
}

Son olarak, .csprojprojemizi oluşturduğumuzda Gulp görevimizin çalıştığından emin olmak için aşağıdaki görevi eklemek için düzenledik :

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

Şimdi, inşa ettiğimizde, defaultGulp görevi çalışır, build-vendorgörevleri çalıştırır ve daha sonra bizim vendor.min.cssve vendor.min.jsdaha önce yaptığımız gibi oluşturur . Yani _Layout.cshtmlaynen yukarıdaki gibi ayarladıktan sonra jQuery ve Bootstrap'ı kullanabiliriz.

Gulp'un ilk kurulumu bundleconfig.jsonyukarıdakinden biraz daha karmaşık olsa da , şimdi Düğüm dünyasına girdik ve oradaki diğer tüm harika araçları kullanmaya başlayabiliriz. Öyleyse bununla başlamaya değer olabilir.

Sonuç

Bu, birdenbire Bower'ı kullanmaktan çok daha karmaşık hale gelse de, bu yeni seçeneklerle çok fazla kontrole sahip oluyoruz. Örneğin, artık wwwrootklasörün içinde gerçekte hangi dosyaların bulunduğuna ve bunların tam olarak nasıl göründüğüne karar verebiliriz . Ayrıca bunu, en azından öğrenme eğrisine biraz yardımcı olması gereken Node ile istemci tarafı geliştirme dünyasına ilk hamleleri yapmak için de kullanabiliriz .


1
Npm yöntemini kullanırken, "Yakalanmamış SyntaxError: Beklenmeyen belirteç dışa aktarma" gibi hataları geri alıyordum. Bunu düzeltmek için popper.js umd dosyasına "node_modules / popper.js / dist / umd / popper.min.js" ye geçtim. Aksi takdirde, yığında gördüğüm en iyi cevaplardan biri, teşekkür ederim.
James Blake

2
@user Bu, Node'un çok eski bir sürümünü kullanıyormuşsunuz gibi geliyor. Sen çalıştırarak sürümünü görebilir node -vve güncel bir sürümünü almak buraya nodejs.org üzerinde
karıştırmak

62
LOL. Gülmem gerek yoksa ağlarım. Visual Studio'nun araç oluşturma desteğini kullanarak on yedi yıllık .Net geliştirme ve işte bu mu geldi? Şahsen, bunun ileriye dönük nasıl bir ilerleme olduğunu göremiyorum. Bir web projesine sadece Bootstrap stilini eklemek bu kadar çaba gerektiriyorsa, bir şeyler büyük ölçüde ters gitti.
camainc

11
@camainc Bir şey varsa, o zaman JavaScript ekosisteminin gelişimini suçlayın. Bu gerçekten .NET veya Visual Studio ile ilgili değildir. Basit çözüm, dosyaları manuel olarak indirmek ve ardından bunları web kökünüze eklemektir. Yıllar önce de böyle çalıştı. - Ve ne olursa olsun, Microsoft bu süreci daha basit (ve güncellenebilir) hale getirmek için yeni VS araçları üzerinde çalışıyor.
dürtmek

3
@ ozzy432836, bunun bir önyükleme sorunu olmadığını biliyorum ve öyle olduğunu hiç söylemedim. Bu, herkesin görünüşte bir sonraki yeni çerçeveyi kovaladığı genel bir geliştirme sorunudur. Kariyerimde pek çok değişiklik gördüm, ancak son birkaç yılda Javascript çevresinde olanlara benzemiyor. Geliştirme topluluğunun bir yeni çerçeveyi birbiri ardına çalkaladığını izlemek kesinlikle çılgınlık oldu. JS'nin ileriye giden yol olup olmadığına gelince, jüri hala bu konuda, özellikle de WASM ve ufukta Blazor gibi projeler varken.
camainc

56

Buna bakıldığında, LibMan yaklaşımı, Bootstrap ekleyerek ihtiyaçlarım için en iyi şekilde çalışıyor gibi görünüyor. Bunu beğendim çünkü artık Visual Studio 2017'de (15.8 veya üzeri) yerleşik ve kendi iletişim kutuları var.

Güncelleme 6/11/2020: bootstrap 4.1.3 artık VS-2019.5 ile varsayılan olarak eklenmiştir (Fark ettiği için Harald S. Hanssen'e teşekkürler.)

VS'nin projelere eklediği varsayılan yöntem, Bower kullanır, ancak çıkış yolunda gibi görünür. Microsofts bower sayfasının başlığında şöyle yazıyorlar: Yalnızca Bower'ın bakımı yapılır.

Birkaç bağlantılar yol takip Visual Studio ASP.NET Core Kullanım Libman nerede gösterir kütüphanelerini kullanılarak eklenebilir nasıl yerleşik bir Dialog:

Solution Explorer'da, dosyaların eklenmesi gereken proje klasörüne sağ tıklayın. Ekle> İstemci Tarafı Kitaplığı'nı seçin. İstemci Tarafı Kitaplığı Ekle iletişim kutusu görüntülenir: [kaynak: Scott Addie 2018 ]

görüntü açıklamasını buraya girin

Sonra bootstrap için sadece (1) Unpkg seçin, (2) "bootstrap @ .." (3) Install yazın. Bundan sonra, yalnızca _Layout.cshtml veya diğer yerlerdeki tüm içerilenlerin doğru olduğunu doğrulamak istersiniz. Onlar gibi bir şey olmalı "... ~ / lib / önyükleme / dist / js / bootstrap" href = )


1
VS 4.7.02558 (Community Edition) kullanıyorum ve bu benim için en kolay seçenekti. Bunu MS 70-486 (MVC) sınavına çalışmak için oluşturulan uygulama projelerinde kullandım, bu yüzden bunun üretime yönelen projeler için ne kadar etkili olduğuna cevap veremiyorum.
Ed Gibbs

2
Benim için bu aynı zamanda malzemeleri MS STANDART ARAÇ ile kurmanın en kolay yoluydu. Gönderinizdeki ipuçlarıyla - Sağlayıcıyı Unpkg olarak değiştirin, bootstrap @ 4 yazın, kurabildim. Libman gerçekten sezgisel değil (benim durumumda, paketler gösterilmeden önce 4'ten sonra. (Noktasını) girmek zorunda kaldım (libman'ın ortamımda çalışmadığını düşündüm).
FredyWenger

2
Sadece bir hatırlatma: CdnJS'de Bootstrap'i arıyorsanız, adının başlangıçta çağrıldığı gibi twitter-bootstrap olduğunu unutmayın.
D.Rosado

1
Visual Studio 2019'da (en son 11 Haziran 2020) - libman dosyası oluşturulur, ancak libman açılır penceresini görmüyorum.
Harald S. Hanssen

1
LibMan'ı birkaç projede test ettim ve gerçekten gidilecek yol bu. GUI'nin çalışmaması çok kötü, ancak birkaç denemeden sonra kullanımı kolay.
Harald S. Hanssen

18

Libman'ı deneyin , Bower kadar basittir ve indirme klasörü olarak wwwroot / lib / belirleyebilirsiniz.


1
Henüz VS2017 sürümünde değil: GÜNCELLEME: 24-Mayıs-2018 - Görünüşe göre LibMan 15.7'nin son sürümüne girmemiş. 15.8.x önizlemesinde
kristianp

1
Görünüşe göre bu son 15.8 sürümüyle çıktı.
Kirk Larkin

Şu anda VS2017 V 15.8'de mevcut ve kabul edilen cevaptan çok daha basit bir yaklaşım
Jemsworld

10

Benim için püf noktası nedir:

1) wwwroot> Ekle> İstemci Tarafı Kitaplığı'na sağ tıklayın

2) Arama kutusuna "bootstrap" yazın

3) "Belirli dosyaları seç" i seçin

4) Aşağı kaydırın ve bir klasör seçin. Benim durumumda "twitter-bootstrap" i seçtim

5) "css" ve "js" yi kontrol edin

6) "Yükle" yi tıklayın.

Birkaç saniye sonra hepsine wwwroot klasörüne sahibim. Eklemek istediğiniz tüm istemci tarafı paketleri için aynısını yapın.


6

Libman artık Microsoft tarafından tercih edilen bir araç gibi görünüyor. Visual Studio 2017 (15.8) ile tümleşiktir.

Bu makale nasıl kullanılacağını ve hatta derleme işlemi tarafından gerçekleştirilen bir geri yüklemenin nasıl ayarlanacağını açıklar.

Bootstrap'in belgeleri , projenizde hangi dosyalara ihtiyacınız olduğunu size söyler.

Aşağıdaki örnek, libman.json için bir yapılandırma olarak çalışmalıdır.

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

}


Teşekkürler, artık kullanılmayan Bower'ı kullanmamı söyleyen Pro ASP.NET Core MVC 2 kitabını takip ediyordum. Projenize sağ tıklayıp Ekle -> İstemci Tarafı kitaplığı'nı seçebileceğinizi fark etmeden önce etrafı bir süre araştırdım. Ve bu libman kullanır. Hepsi yerleşik.
TxRegex

4

Asp.net çekirdeğinde bootstrap 4 kullanıyoruz, ancak "Paket Yükleyici" uzantısını kullanarak "npm" deki kitaplıklara başvuruyoruz ve bunun Javascript / CSS kitaplıkları için Nuget'ten daha iyi olduğunu gördük.

Daha sonra, dağıtım için ilgili dosyaları (projenin dışında bulunan npm node_modules klasöründen) geliştirme / dağıtım için istediğimiz şekilde wwwroot'a kopyalamak için "Bundler & Minifier" uzantısını kullanıyoruz.


4

Ne yazık ki, bir .NET Core projesine Bootstrap'i (veya diğer birçok JavaScript / CSS çerçevesini) yüklemek için NuGet'i kullanırken zorlanacaksınız. NuGet kurulumuna bakarsanız, uyumsuz olduğunu söyler:

görüntü açıklamasını buraya girin

yerel paket bağımlılıklarının nerede olduğunu bilmeniz gerekiyorsa, bunlar artık yerel profil dizininizdedir. yani %userprofile%\.nuget\packages\bootstrap\4.0.0\content\Scripts.

Bununla birlikte, Saineshwar'ın cevabında olduğu gibi npm veya bower'a geçmenizi öneririm.


2

BS4 artık .NET Core 2.2'de mevcuttur . Kesinlikle SDK 2.2.105 x64 yükleyicide. Bununla birlikte Visual Studio 2017 çalıştırıyorum. Şimdiye kadar yeni web uygulama projeleri için çok iyi.


2

Neden sadece bir CDN kullanmıyorsunuz? BS kodunu düzenlemeniz gerekmedikçe, sadece CDN'deki kodlara başvurmanız gerekir.

BS 4 CDN'ye Bakın:

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

Sayfanın sonunda.


1
Bir CDN'nin kullanılması, bir çalışma zamanı bağımlılığı ekler. Yani CDN düşerse, siteniz de düşer. Bu bir güvenlik sorunudur, çünkü cdn'yi kontrol eden kişi popüler dosyaları değiştirebilir ve sitenize komut dosyası enjekte edebilir. Ayrıca, kullanıcının tarayıcısı dosyaları sizinkinden ziyade 3. taraf bir sunucudan talep ettiğinden bu bir gizlilik sorunudur.
TxRegex

3
@TxRegex bir aşamada, referansların bir web uygulamasının sunucusundan ziyade CDN'ye olması önerildi; çünkü bir kullanıcının tarayıcısı, diğer siteleri incelerken Bootstrap gibi popüler bir kitaplığı önceden önbelleğe almış olabilir. Ama her neyse ...
19'da

0

Nmp yapılandırma dosyasını kullanın (web projenize ekleyin) ardından gerekli paketleri bower.json kullanarak yaptığımız gibi ekleyin ve kaydedin. Visual studio indirip kuracaktır. Paketi, projenizin nmp düğümünün altında bulacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.