Nuxt.jsでIE11対応したときに「strict モードでは、プロパティの複数定義は許可されません。」と怒られる
NuxtのSSGでWebページを作る仕事をしており、
その際IE11対応をする必要がありました。
既にChromeやEdgeなど他のブラウザではちゃんと動いている状態だったのですが
IEでだけ表示が崩れていました。
(まぁよくあることですね)
IEのコンソールを見てみると以下のような状態でした。
strict モードでは、プロパティの複数定義は許可されません。とのこと。。。
今回は私のケースではこう解決しましたよという話をします。
すべてのケースでこれが正しいってわけではないと思います。
結論
- エラーメッセージの通り、同じプロパティを二回設定している可能性があるので、スタックトレースに出力されているコンポーネントをよく見直しましょう。
- strictモードを解除するは最終手段にしよう。
- なぜ他のブラウザでは怒られないのか・・・
解決するまでにしたこと
まずエラーメッセージをググってみる
まずエラーメッセージをググってみる
とりあえずstrictモードをやめると解決したよ!みたいな情報が多かったので
その方向で色々と検証しました。
- tsconfig.jsonに「"alwaysStrict": false」を設定する
- babel-plugin-transform-remove-strict-mode を使ってみる
私の試したプロジェクトではいずれも上手くいかず、strict modeが解除されなかったです。
(babelやTSへの理解が浅いことも原因かもしれません)
まぁそもそもあまり根本的な解決法ではなさそうなので断念することに。
スタックトレースを読んでみる
スタックトレースを見てみると概ね以下のような状態でした。
※一部ファイル名等変更してます。
stack: "SyntaxError: strict モードでは、プロパティの複数定義は許可されません。
at ./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/@nuxt/components/dist/loader.js?!./node_modules/vue-loader/lib/index.js?!./components/organisms/layouts/Modal.vue?vue&type=template&id=da284a90&scoped=true& (http://localhost:3000/_nuxt/pages/index.js:1016:1)
at __webpack_require__ (http://localhost:3000/_nuxt/runtime.js:854:12)
at fn (http://localhost:3000/_nuxt/runtime.js:151:13)
at eval code (eval code:2:22)
at ./components/organisms/layouts/Modal.vue?vue&type=template&id=da284a90&scoped=true& (http://localhost:3000/_nuxt/pages/index.js:536:1)
at __webpack_require__ (http://localhost:3000/_nuxt/runtime.js:854:12)
at fn (http://localhost:3000/_nuxt/runtime.js:151:13)
at eval code (eval code:2:22)
at ./components/organisms/layouts/Modal.vue (http://localhost:3000/_nuxt/pages/index.js:500:1)
at __webpack_require__ (http://localhost:3000",
Symbol()_e.kk24c8l2mhc: undefined
下から3行目辺りにこちらで用意したVueコンポーネントがでていたので
そちらを探ることになりました。
色々調べていると以下のページにたどり着きました。
英語のエラーメッセージで検索(Multiple definitions of a property not allowed in strict mode)
https://github.com/BabylonJS/Babylon.js/issues/4257
同じpropsを二回設定している。。。
もう一回見直してみると私のところでは以下のようにやらかしてました。
widthを二回設定しています。
<div class="container" :style="{ width, width, maxWidth, maxHeight }">
<slot></slot>
</div>
結局凡ミスでした。
参考
https://alliance7.blogspot.com/2019/07/ie11strict.html
https://github.com/BabylonJS/Babylon.js/issues/4257
Author And Source
この問題について(Nuxt.jsでIE11対応したときに「strict モードでは、プロパティの複数定義は許可されません。」と怒られる), 我々は、より多くの情報をここで見つけました https://qiita.com/maroKanatani/items/fbb7c96b5c49edd81339著者帰属:元の著者の情報は、元の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 .