ASP.NET Core에서 Bootstrap 4를 사용하는 방법


112

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-beta.3을 bootstrap@4.0.0으로 교체하십시오. stackoverflow.com/questions/47985337/…
mrapi

1
현재 이것은 Libman을 사용하는 가장 쉬운 대답입니다. stackoverflow.com/a/53012140/578552
rfcdejong

이제 NUGET에서 버전 4.4.1과 호환됩니다.
Diego Venâncio

답변:


223

다른 사람들이 이미 언급했듯이 무거운 클라이언트 측 스크립팅에 의존하지 않는 응용 프로그램에서 이와 같은 종속성에 일반적으로 사용되는 패키지 관리자 Bower나가는 중이며 다른 솔루션으로 이동할 것을 적극 권장합니다.

..psst! Bower가 유지되는 동안 새로운 프론트 엔드 프로젝트를 위해 yarnwebpack 을 권장 합니다!

따라서 지금도 여전히 사용할 수 있지만 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 또는 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 설명 된대로 번들링 및 축소를 위해 를 소비하는 다양한 방법 중 하나를 사용할 수 있습니다 . 매우 쉬운 방법은 빌드 작업을 자동으로 설정 하는 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대한 종속성을 갖도록 조정해야합니다 .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.css그리고 vendor.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"로 전환했습니다. 그렇지 않으면 내가 스택에서 본 최고의 답변 중 하나입니다. 감사합니다.
James Blake

2
@user 아주 오래된 버전의 Node.js를 사용하는 것 같습니다. 를 실행하여 버전을 확인하고 nodejs.orgnode -v 에서 현재 버전
poke

62
LOL. 나는 웃어야한다. 그렇지 않으면 울 것이다. Visual Studio의 도구 지원을 사용하여 17 년 동안. 개인적으로 나는 이것이 어떻게 앞으로 진행되는지 보지 못합니다. 웹 프로젝트에 부트 스트랩 스타일링을 추가하는 데이 정도의 작업이 필요하다면 뭔가 크게 잘못되었습니다.
camainc

11
@camainc 만약 있다면 자바 스크립트 생태계의 발전을 탓하십시오. 이것은 실제로 .NET 또는 Visual Studio와 전혀 관련이 없습니다. 간단한 해결책은 파일을 수동으로 다운로드 한 다음 웹 루트에 추가하는 것입니다. 그게 몇 년 전부터 작동했던 방식입니다. – 그리고 그 가치를 위해 Microsoft는이 프로세스를 더 간단하고 업데이트 할 수 있도록 새로운 VS 도구를 개발하고 있습니다.
찌를

3
@ ozzy432836, 나는 그것이 부트 스트랩 문제가 아니라는 것을 알고 있으며 결코 그렇게 말하지 않았습니다. 모두가 다음 새 프레임 워크를 쫓는 것처럼 보이는 일반적인 개발 문제입니다. 저는 제 경력에서 많은 변화를 보았지만 Javascript를 둘러싼 지난 몇 년 동안 일어난 일과 같은 것은 없습니다. 개발 커뮤니티가 새로운 프레임 워크를 잇달아 휘젓는 것을 보는 것은 정말 미쳤습니다. JS가 앞으로 나아갈 길에 관해서는 배심원이 여전히 그 문제에 대해, 특히 WASM과 Blazor와 같은 프로젝트가 지평선에 있습니다.
camainc

56

이것을 살펴보면 LibMan 접근 방식이 Bootstrap을 추가하여 내 요구에 가장 잘 맞는 것 같습니다. 이제 Visual Studio 2017 (15.8 이상)에 내장되어 있고 자체 대화 상자가 있기 때문에 마음에 듭니다.

2020 년 6 월 11 일 업데이트 : 이제 부트 스트랩 4.1.3이 VS-2019.5에 기본적으로 추가되었습니다 (알려준 Harald S. Hanssen에게 감사드립니다.)

VS가 프로젝트에 추가하는 기본 방법은 Bower를 사용하지만 나가는 것처럼 보입니다. Microsoft의 bower 페이지 헤더에 다음과 같이 작성합니다. Bower는 관리 만 가능합니다. LibManager 사용을 권장합니다.

몇 가지 링크를 따라 가면 Visual Studio 에서 ASP.NET Core와 함께 LibMan을 사용하여 기본 제공 대화 상자를 사용하여 lib를 추가하는 방법 을 보여줍니다 .

솔루션 탐색기에서 파일을 추가해야하는 프로젝트 폴더를 마우스 오른쪽 단추로 클릭합니다. 추가> 클라이언트 측 라이브러리를 선택합니다. 클라이언트 측 라이브러리 추가 대화 상자가 나타납니다. [출처 : Scott Addie 2018 ]

여기에 이미지 설명 입력

그런 다음 부트 스트랩의 경우 (1) unpkg를 선택하고 (2) "bootstrap @ .."을 입력합니다. (3) 설치합니다. 그런 다음 _Layout.cshtml 또는 다른 위치의 모든 포함이 올바른지 확인하고 싶을 것입니다. 그들은 같은 것을해야 "... ~ / lib 디렉토리 / 부트 스트랩 / DIST / JS / 부트 스트랩"HREF = )


1
나는 VS 4.7.02558 (커뮤니티 에디션)을 가지고 있으며 이것이 나에게 가장 쉬운 옵션이었습니다. MS 70-486 (MVC) 시험 공부를 위해 만든 실습 프로젝트에서 사용했기 때문에 프로덕션으로 향하는 프로젝트에 얼마나 효과적인지 대답 할 수 없습니다.
Ed Gibbs

2
나에게 이것은 또한 MS STANDARD TOOL로 물건을 설치하는 가장 쉬운 방법이었습니다. 게시물의 힌트를 사용하여 Provider를 unpkg로 변경하고 bootstrap @ 4를 입력하십시오. 설치가 가능했습니다. Libman 직관적 정말 아니다 (내 경우, 나는를 입력 할 수도 있었다 (점) 4 후, 패키지가 보였다 전에 (내가 libman 내 환경에서 작동하지 않는, 생각)..
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 릴리스와 함께 출시 된 것 같습니다.
Kirk Larkin

이제 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 19

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을 실행하고 있습니다. 지금까지 새로운 웹 애플리케이션 프로젝트에 적합합니다.


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 노드 아래에서 패키지를 찾을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.