🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

Q&A

解決済

1回答

2020閲覧

Bootsrap-vueのMultiple instances of Vue detected!の警告を解消できずに困っています。

imanau

総合スコア2

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

gulp

gulpは、Node.jsをベースとしたタスク自動化ツールの一つ。ストリームでファイルを処理することが特徴です。CSSプリプロセッサの使用時のコンパイルや、CSS・JavaScriptファイルの圧縮・結合などを自動的に行うことができます。

0グッド

0クリップ

投稿2020/06/01 11:34

前提・実現したいこと

現在gulp及びbrowsifyを利用している、vue.jsプロジェクトにBootstrap-vueを導入したところですが、以下警告が表示され困っています。
公式サイトやGitHubなどを見て解決を試みたのですが、解決できませんでしたので、お力添えをいただければ非常に助かります!

発生している問題・エラーメッセージ

[BootstrapVue warn]: Multiple instances of Vue detected! You may need to set up an alias for Vue in your bundler config. See: https://bootstrap-vue.org/docs#using-module-bundlers vue.runtime.common.dev.js:621
You are running Vue in development mode. Make sure to turn on production mode when deploying for production. See more tips at https://vuejs.org/guide/deployment.html VM43:146 serviceWorker registed. vue.common.dev.js:9054
You are running Vue in development mode. Make sure to turn on production mode when deploying for production. See more tips at https://vuejs.org/guide/deployment.html vue.runtime.common.dev.js:8406

原因

Bootstrap-vueの公式サイトに書いてある、Aliasing Vue importが原因だと思います。

If you are using a specific build of Vue (i.e. runtime-only vs. compiler + runtime), you will need to set up an alias to 'vue' in your bundler config to ensure that your project, BootstrapVue and PortalVue are all using the same build version of Vue. If you are seeing an error such as "$attr and $listeners is readonly", or "Multiple instances of Vue detected", then you will need to set up an alias.

こちらを見るに、Bootstrap-vueの内部的に reqire 'vue'とvueを呼び出していますが、この呼び出しているvueがBootstrap-vueでは、 vue.runtime.common.js であるのに対し、プロジェクトで参照しているのはvue.common.jsであるため、2つのvueインスタンスが見つかり、エラーが起こっているようです。

試したこと

公式サイトに書いてあるように import Vue from 'vue'require 'vue'とした時にvue.common.jsを共通的に見に行ってほしいのですが、どうにもうまくいきません。

バンドラーにwebpackを利用している場合、以下のように記載すれば解決するようですが、プロジェクトの都合でbrowesifyを利用する制限があります。

js

1// webpackの場合 2module.exports = { 3 // ... 4 resolve: { 5 alias: { 6 // If using the runtime only build 7 vue$: 'vue/dist/vue.runtime.esm.js' // 'vue/dist/vue.runtime.common.js' for webpack 1 8 // Or if using full build of Vue (runtime + compiler) 9 // vue$: 'vue/dist/vue.esm.js' // 'vue/dist/vue.common.js' for webpack 1 10 } 11 } 12}

[vue.jsの公式サイト][https://vuejs.org/v2/guide/installation.html#Runtime-Compiler-vs-Runtime-only]を参考にしながら、package.jsonに以下のように記載したのですが、エラー内容も変わらず、複数のvueインスタンスが生成されてしまっているようです。

json

1{ 2 // ... 3 "browser": { 4 "vue": "vue/dist/vue.common.js" 5 } 6}

また、Bootstrap-vueのGitHubのissueを見てBootstrapVueの呼び出し方を変えて見ましたが、これまたエラー内容に変わり有りませんでした。

js

1// import Vue from 'vue' 2// import BootstrapVue from 'bootsrap-vue' 3// Vue.use(BootstrapVue) 4// ↑こちらとエラー内容に変わりなし 5Vue.use(require('bootstrap-vue/dist/bootstrap-vue.common.min'));

補足情報(FW/ツールのバージョンなど)

vue: 2.6.10
bootstrap-vue: 2.15.0

色々試したのですが、万策尽きたという感じです。
もし似たような問題を見たことがある、解決したことがあるという方はご意見をお聞かせください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました!

There is a special "browser" field you can set in your package.json on a per-module basis to override file resolution for browser-specific versions of files.

For example, if you want to have a browser-specific module entry point for your "main" field you can just set the "browser" field to a string:

"browser": "./browser.js"
or you can have overrides on a per-file basis:

"browser": {
"fs": "level-fs",
"./lib/ops.js": "./browser/opts.js"
}
Note that the browser field only applies to files in the local module, and like transforms, it doesn't apply into node_modules directories.

公式のここbrowserフィールドはnode_modeulesには使えないとはっきり書いてくださってました。

しっかり、公式ドキュメントを読み直したら、ちゃんとrequire.resolveをできるオプションを用意してくださってました。(参考)[https://github.com/browserify/browserify#brequirefile-opts]

これを利用し、以下のようにgulp.jsに追記しました。

js

1.transform(babelify) 2.require('vue/dist/vue.common.js',{expose: 'vue'}) //追加 3.bundle() 4

投稿2020/06/01 13:25

imanau

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問