[解決済み] Nuxt.jsで "window is not defined "と表示される。
質問
Vue.jsからNuxt.jsに移植する際にエラーが発生します。
を使おうとしています。
vue-session
で
node_modules
. コンパイルは成功するのですが、ブラウザではエラーが表示されます。
ReferenceError windowが定義されていません。
node_modules\vue-session\index.js
:
VueSession.install = function(Vue, options) {
if (options && 'persist' in options && options.persist) STORAGE = window.localStorage;
else STORAGE = window.sessionStorage;
Vue.prototype.$session = {
flash: {
parent: function() {
return Vue.prototype.$session;
},
ということで、以下のようにしました。 このドキュメント :
rewardadd.vue
:
import VueSession from 'vue-session';
Vue.use(VueSession);
if (process.client) {
require('vue-session');
}
nuxt.config.js
:
build: {
vendor: ['vue-session'],
しかし、まだこの問題を解決することができません。
どうすればいいですか?
2021年8月更新
Window is not definedエラーは、nodejsのサーバーサイドスクリプトが、ブラウザにしかないウィンドウオブジェクトを認識しないことに起因します。
nuxtの時点では
v2.4
を追加する必要はありません。
process.client
または
process.browser
オブジェクトを作成します。
通常、nuxtのプラグインディレクトリは以下のような構造になっています。
~/plugins/myplugin.js
import Vue from 'vue';
// your imported custom plugin or in this scenario the 'vue-session' plugin
import VueSession from 'vue-session';
Vue.use(VueSession);
そして、あなたの
nuxt.config.js
を選択すると、以下の2つの方法でプロジェクトにプラグインを追加することができます。
方法1:
を追加します。 モード プロパティ という値で 'クライアント' をプラグインに追加します。
plugins: [
{ src: '~/plugins/myplugin.js', mode: 'client' }
]
方法2: (私見ではよりシンプル)
プラグインの名前を拡張子で変更する
.client.js
でプラグインに追加してください。
nuxt.config.js
プラグインを使用します。Nuxt 2.4.xでは、プラグインの拡張子はサーバ側でレンダリングされるものとして認識されます。
.server.js
またはクライアント側
.client.js
に応じて
拡張子
を使用します。
注意: ファイルを追加する際に
.client.js
または
.server.js
拡張を使用すると、クライアント側とサーバー側の両方でプラグインがレンダリングされます。続きを読む
こちら
.
plugins: [
{ src: '~/plugins/myplugin.client.js' }
]
関連
-
[解決済み] Vue.js Chrome DevtoolsがVue.jsを検出しないのはなぜですか?
-
[解決済み] Laravel Spark v4.0.9で「Vue packages version mismatch」エラーを修正するにはどうすればいいですか?
-
プロジェクトノート ---- TypeErrorに遭遇しました。"_vm.xxxxxx は関数ではありません"
-
[解決済み] Vuex - 計算されたプロパティ "name "が割り当てられたが、セッターを持たない
-
[解決済み] Vue.jsでグローバルフィルタを大量に追加する方法は?
-
[解決済み】TypeError: this.getOptions は関数ではありません。
-
[解決済み】名前空間が設定された2つのVuexモジュール間でアクションをディスパッチする方法はありますか?
-
[解決済み】Vue.jsの別ページへのリダイレクトについて
-
[解決済み] Vue CLI CSSプリプロセッサーオプション:dart-sass VS node-sass?
-
[解決済み】VS CodeでPrettierがコードをフォーマットしないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] プロジェクトのvue.jsのバージョンを確認する方法は?
-
未定義のプロパティ '0' を読み取ることができません。
-
_this.axios is not a functionの原因と解決方法
-
vue リクエストエラー Uncaught (プロミス内)
-
TypeError: undefinedはオブジェクトではありません('i18n._t'を評価中)。
-
[解決済み] Vuex - 計算されたプロパティ "name "が割り当てられたが、セッターを持たない
-
[解決済み】TypeError: this.getOptions は関数ではありません。
-
[解決済み】@clickとv-on:clickの違い Vuejs
-
[解決済み】Vueのデータからhrefに値を渡すには?
-
[解決済み] Vueアプリのビルドを生成するには、どのコマンドを使用すればよいですか?