【俺的暫定対応】viteビルドのVue3にbootstrap-vueが追加出来なかった場合
はじめに
viteビルドのVue3にbootstrap-vueをインストールして
ビルドしたら下記のようなエラーが出ました。。。
npm ERR! code ELIFECYCLE
npm ERR! [email protected] dev: `vite`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] dev script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output abo
色々調べてみたものの、Vue3は新しいから色んなプラグイン?フレームワークが対応していない!対応中!みたいなことが書かれていたりしました2020/12月くらいの記事なので、今はちゃんと対応しているかも。。。
調べてもよく分からなかったので暫定対応することにしました
試したこと
1.Vueの共通コンポーネントにBootstrapのCDNリンクを突っ込む
→ダメでした。Vueコンポーネントでは、scriptがIngonerされてしまうので、BootstrapのScriptが読み込めませんでした
2.index.htmlにBootstrapのCDNリンクを突っ込む
VueはSPAでSPAってどうやって動いているかっていうかっていう記事を見たことを思い出しました。
まずはindex.htmlにアクセスされて、そっからjsを読み込んで各ページのhtmlを生成するみたいことが書いてありました
であれば、index.htmlはどこのページにアクセスしても読み込まれるわけなので、ここつっこみました
→うまくいった!
実際のコード
index.html(vueのフォルダ直下のindex.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<!--BootstrapのCDNのやつを読み込む-->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
Header.vue
<template>
<div class="pos-f-t">
<!-- javascript 使うBootstrap(ボタン押すとひゅーんって表示されるナビゲーションバー)-–>
<div class="collapse" id="navbarToggleExternalContent">
<div class="bg-dark p-4">
<h5 class="text-white h4">Collapsed content</h5>
<span class="text-muted">Toggleable via the navbar brand.</span>
</div>
</div>
<nav class="navbar navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</nav>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'Header',
})
</script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vite App</title>
</head>
<body>
<div id="app"></div>
<!--BootstrapのCDNのやつを読み込む-->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"
integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
<script type="module" src="/src/main.ts"></script>
</body>
</html>
<template>
<div class="pos-f-t">
<!-- javascript 使うBootstrap(ボタン押すとひゅーんって表示されるナビゲーションバー)-–>
<div class="collapse" id="navbarToggleExternalContent">
<div class="bg-dark p-4">
<h5 class="text-white h4">Collapsed content</h5>
<span class="text-muted">Toggleable via the navbar brand.</span>
</div>
</div>
<nav class="navbar navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</nav>
</div>
</template>
<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
name: 'Header',
})
</script>
あとはApp.VueでHeader.Vueを読み込んであげると・・・
ひゅーんって動くjavascript入りBootstrapが動きました!
以上。
おわりに
本来ライブラリちゃんとインストールしてあげて一緒にビルドしてあげるのが良いかと思いますが
プロジェクトが重くなったり配信するファイル容量が大きくなることを考えたら
CDN版使ったほうが、色々と負担が減るのではないのかな?とか思ったりしました
ただ、ライブラリいっぱい突っ込んでる場合、JQuery辺りが競合しそうで怖いな~くらいですね
参考文献
Author And Source
この問題について(【俺的暫定対応】viteビルドのVue3にbootstrap-vueが追加出来なかった場合), 我々は、より多くの情報をここで見つけました https://qiita.com/HawkClaws/items/91b8893d1d4630d164cd著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .