Nuxt3 で CodeMirror6 を使おうとしたらなんか例外になるので対応する

ふとしです。

このブログでは編集画面で CodeMirror6 を使っていますが、起動時に例外が出てしまいます。

Uncaught TypeError: Cannot read properties of undefined (reading 'LOG')
    at index.js:800:79

原因

エラーの箇所にコードジャンプしてみると以下の通り。

const verbose = typeof process != "undefined" && /\bparse\b/.test(process.env.LOG);

process はあるのに env がないので無事例外発生というわけです。process があるから Nodejs 上で使ってるんだろうし env ももちろんあるやろってアクセスしたらこの有様というわけですね。

ご存知の通り Nuxt では process.server という今はサーバー上での処理中です、あるいはちがいますといったフラグをサーバーでもブラウザでも取れるように常に process が存在するのでこういう例外が発生してしまいます。

対応

Nuxt2 では Webpack の defineComponent?などで対応できますが Nuxt3 からはデフォルトで Vite が使われているので Vite の define パラメーターを使って変数などを書き換えることができます。

ただし Vite のコンフィグファイルからではなく nuxt.config.js から設定を行えるので、そちらに追記します。渡す値は JSON.stringify されたものであることに注意しましょう。

export default defineNuxtConfig({
  vite: {
    define: {
      'process.env.LOG': '""',
    },
  },
});

解決

これで例外が出なくなり、無事 CodeMirror6 で快適に編集できるようになりました。