Як використовувати Bootstrap 4 в ASP.NET Core


112

Я хочу оновити Bootstrap в ASP.NET Core з NuGet. Я використав це:

Install-Package bootstrap -Version 4.0.0

Це додало залежності, але як я зараз додаю його до свого проекту? Який шлях до локальних залежностей NuGet?

Встановлені залежності NuGet


3
BS4 не повинен мати підтримку Bower (джерело: getbootstrap.com/docs/4.0/migration/#breaking )
Klooven,

Замінити bootstrap@4.0.0-beta.3 з bootstrap@4.0.0: stackoverflow.com/questions/47985337 / ...
MRAPI

1
В даний час це повинно бути прийнятним відповіддю, простіше з допомогою Лібман: stackoverflow.com/a/53012140/578552
rfcdejong

Версія 4.4.1 сумісна NUGET.
Дієго Венансіо

Відповіді:


223

Як вже згадували інші, менеджер пакунків Bower , який зазвичай використовувався для таких залежностей у додатку, які не покладаються на важкі сценарії на стороні клієнта, виходить і активно рекомендує перейти до інших рішень:

..psst! Поки Bower підтримується, ми рекомендуємо пряжу та веб- упаковку для нових передових проектів!

Тож хоча ви все ще можете ним скористатися зараз, Bootstrap також оголосив про припинення підтримки . Як результат, вбудовані шаблони ASP.NET Core поступово редагуються, щоб також віддалятися від нього.

На жаль, немає чіткого шляху вперед. В основному це пов'язано з тим, що веб-додатки постійно просуваються далі на сторону клієнта, вимагаючи складних систем побудови на клієнті та багатьох залежностей. Отже, якщо ви будуєте щось подібне, ви, можливо, вже знаєте, як це вирішити, і ви можете розширити свій існуючий процес збирання, щоб просто також включити Bootstrap і jQuery туди.

Але все ще є багато веб-додатків, які не такі важкі на стороні клієнта, де програма все ще працює в основному на сервері і в результаті сервер подає статичні подання. Раніше 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.

Для початку нам потрібно створити 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для згуртування та мінімізації, як це пояснено в документації . Дуже простий спосіб - просто використовувати пакет 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у свій корінь проекту із таким змістом:

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виконується завдання Gulp, яке виконує build-vendorзавдання, яке потім будує наше vendor.min.cssі так vendor.min.jsсамо, як ми робили раніше. Отже, відкоригувавши так _Layout.cshtmlсамо, як вище, ми можемо скористатися jQuery та Bootstrap.

Незважаючи на те, що початкова настройка Gulp трохи складніша, ніж bundleconfig.jsonописана вище, ми тепер увійшли до Світового вузла і можемо почати використовувати всі інші цікаві інструменти там. Тож, можливо, варто було б почати з цього.

Висновок

Хоча це раптом стає набагато складніше, ніж просто використання Bower, ми також отримуємо багато контролю над цими новими параметрами. Наприклад, тепер ми можемо вирішити, які файли фактично включені в wwwrootпапку і як саме вони виглядають. І ми також можемо використовувати це для того, щоб зробити перші кроки у світ розвитку на стороні клієнта за допомогою Node, який, принаймні, повинен трохи допомогти кривій навчання.


1
Під час використання методу npm я отримував помилки на кшталт "Uncaught SyntaxError: Несподіваний експорт маркера". Щоб виправити це, я перейшов на файл popd.js umd "node_modules / popper.js / dist / umd / popper.min.js". Інакше одна з найкращих відповідей, яку я коли-небудь бачив у стеці, дякую.
Джеймс Блейк

2
@user Це звучить так, ніби ви використовуєте дуже стару версію Node. Ви можете побачити версію, запустивши node -vі отримати поточну версію тут на nodejs.org
пхати

62
ЛОЛ. Мені доведеться сміятися, або я заплачу. Сімнадцять років .Net розвивався за допомогою інструментальної підтримки Visual Studio, і це дійшло до цього? Особисто я не бачу, як це вперед прогрес. Якщо знадобиться стільки роботи, щоб просто додати стиль Bootstrap до веб-проекту, то щось пішло не так.
camainc

11
@camainc Якщо що-небудь, то звинувачуйте це у розвитку екосистеми JavaScript. Це насправді взагалі не пов’язано з .NET або Visual Studio. Простим рішенням залишається просто завантажити файли вручну, а потім додати їх у свій веб-корінь. Ось так воно працювало і всі роки раніше. - І для чого це варто, Microsoft працює над новим інструментом VS, щоб зробити цей процес простішим (і оновленим).
ткнути

3
@ ozzy432836, я знаю, що це не проблема завантаження, і я ніколи не казав, що це було. Це загальне питання розвитку, і кожен, здавалося б, переслідує наступні нові рамки. Я спостерігав багато змін у своїй кар’єрі, але нічого подібного до того, що сталося за останні пару років навколо Javascript. Це було абсолютно горішком, спостерігаючи за розвитком спільноти, що розробляє нові рамки за іншим. Що стосується того, чи є JS шлях уперед, то журі все ще залишається на цьому, особливо з WASM та такими проектами, як Blazor на горизонті.
camainc

56

З огляду на це, здається, що підхід LibMan найкраще працює для моїх потреб із додаванням Bootstrap. Мені це подобається, оскільки він зараз вбудований у Visual Studio 2017 (15.8 або новішої версії) та має власні діалогові вікна.

Оновлення 6/11/2020: тепер за замовчуванням додається завантажувальна програма 4.1.3 (VS-2019.5 (спасибі Харальду С. Ганссену).

Метод за замовчуванням VS додає до проектів, використовуючи Bower, але, схоже, він вже на виході. У заголовку сторінки буфера Microsofts написано : Бауер підтримується лише. Рекомендуйте використовувати LibManager

Після декількох посилань ведеться до використання LibMan з ASP.NET Core у Visual Studio, де показано, як можна додати libs за допомогою вбудованого діалогового вікна:

У Провіднику рішень клацніть правою кнопкою миші папку проекту, в яку слід додати файли. Виберіть Додати> Бібліотека на стороні клієнта. З'явиться діалогове вікно Додати бібліотеку на стороні клієнта: [джерело: Скотт Адді 2018 ]

введіть тут опис зображення

Тоді для завантажувального просто (1) виберіть unpkg, (2) введіть "bootstrap @ .." (3) Встановити. Після цього ви просто хочете перевірити, чи всі включені в _Layout.cshtml чи інші місця правильні. Вони повинні бути чимось на зразок href = "~ / lib / bootstrap / dist / js / bootstrap ..." )


1
У мене VS 4.7.02558 (Community Edition), і це був найпростіший варіант для мене. Я використовував це в практичних проектах, створених для вивчення іспиту MS 70-486 (MVC), тому я не можу відповісти, наскільки це ефективно для проектів, які спрямовуються на виробництво.
Ед Гіббс

2
Для мене це також був найпростіший спосіб встановити речі за допомогою MS STANDARD TOOL. З підказками у вашій публікації - змініть Провайдера на unpkg, введіть bootstrap @ 4., Я зміг встановити. Libman насправді не інтуїтивно зрозумілий (у моєму випадку мені довелося також ввести. (Пункт) після 4, перш ніж пакети були показані (я думав, що Libman не працює в моєму середовищі).
FredyWenger

2
Нагадування: якщо ви шукаєте Bootstrap на CdnJS, пам’ятайте, що це ім’я twitter-bootstrap, як воно називалося спочатку.
Д.Росадо

1
У Visual Studio 2019 (останнє до 11 червня 2020 року) - файл libman створюється, але я не бачу спливаючого вікна libman.
Харальд С. Ганссен

1
Я протестував LibMan на кількох проектах, і це дійсно шлях. Шкода, що графічний інтерфейс не працює, але після декількох спроб його легко використовувати.
Харальд С. Ганссен

18

Спробуйте Libman , це так просто, як Bower, і ви можете вказати wwwroot / lib / як папку для завантаження.


1
Ще не у випуску VS2017: ОНОВЛЕННЯ: 24 травня 2018 - Схоже, 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"
    ]
  }
]

}


Дякую, я слідував за книжкою Pro ASP.NET Core MVC 2, яка сказала мені використовувати Bower, який тепер застарів. Я довгий час обшукував, перш ніж зрозумів, що ви можете просто клацнути правою кнопкою миші ваш проект і вибрати Додати -> Клієнтська бібліотека. І для цього використовується libman. Це все вбудовано.
TxRegex

4

Ми використовуємо bootstrap 4 в ядрі asp.net, але посилаємось на бібліотеки з "npm", використовуючи розширення "Package Installer", і вважаємо, що це краще, ніж Nuget для бібліотек Javascript / CSS.

Потім ми використовуємо розширення "Bundler & Minifier", щоб скопіювати відповідні файли для розповсюдження (із папки npm node_modules, яка сидить поза проектом) у wwwroot, як нам подобається для розробки / розгортання.


4

На жаль, вам доведеться нелегко використовувати NuGet для установки Bootstrap (або більшості інших фреймворків JavaScript / CSS) у проект .NET Core. Якщо ви подивитесь на встановлення NuGet, він скаже, що він несумісний:

введіть тут опис зображення

якщо ви повинні знати, де залежать локальні пакунки, вони тепер знаходяться у вашому локальному каталозі профілів. тобто %userprofile%\.nuget\packages\bootstrap\4.0.0\content\Scripts.

Однак я пропоную перейти на npm, або bower - як у відповіді Сайншвар.


2

BS4 тепер доступний у .NET Core 2.2 . У програмі встановлення SDK 2.2.105 x64 точно. Я запускаю Visual Studio 2017 з ним. Поки що добре для нових проектів веб-додатків.


2

Чому б просто не використовувати CDN? Якщо вам не потрібно редагувати код BS, тоді вам просто потрібно посилатися на коди в CDN.

Дивіться BS 4 CDN тут:

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

Внизу сторінки.


1
Використання CDN додає залежність від часу виконання. Тож якщо CDN знизиться, то і ваш сайт. Це проблема безпеки, оскільки той, хто контролює cdn, може змінювати популярні файли та вводити скрипт на ваш сайт. Це також проблема конфіденційності, оскільки браузер користувача запитує файли з сторонніх серверів, а не з вашого власного.
TxRegex

3
@TxRegex на певному етапі фактично рекомендували посилатися на CDN, а не на сервер веб-програми; тому що браузер користувача, ймовірно, вже кешував популярну бібліотеку, таку як Bootstrap, переглядаючи інші сайти. Але що б там не було
joedotnot

0

Використовуйте файл конфігурації nmp (додайте його до вашого веб-проекту), а потім додайте необхідні пакети так само, як ми зробили bower.json і збережіть. Visual studio завантажить і встановить його. Ви знайдете пакет під вузлом nmp вашого проекту.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.