Vue.js で console.log を使うとビルド時にコケるので対処する

Vue CLI 3 で作成したアプリケーション中に console.log()console.error() などを書いた状態で npm run build (= vue-cli-service build) をすると、エラーが発生してしまい正しくビルドできなかった。

$ npm run build

> frontend@0.0.0 build /Users/Neo/practice-flask-vue/frontend
> vue-cli-service build

⠙  Building for production...Starting type checking service...
Using 1 worker with 2048MB memory limit
⠼  Building for production...

 ERROR  Failed to compile with 1 errors    16:07:09

 error  in ./src/App.vue

Module Error (from ./node_modules/eslint-loader/index.js):
error: Unexpected console statement (no-console) at src/App.vue:73:7:
  71 |     }
  72 |     catch(error) {
> 73 |       console.error(error);
     |       ^
  74 |       this.errorMessage = `${error}`;
  75 |     }
  76 |   }

error: Unexpected console statement (no-console) at src/App.vue:91:7:
  89 |     }
  90 |     catch(error) {
> 91 |       console.error(error);
     |       ^
  92 |       this.errorMessage = `${error}`;
  93 |     }
  94 |   }

2 errors found.

 @ ./src/main.ts 6:0-28 10:13-16
 @ multi ./src/main.ts

 ERROR  Build failed with errors.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! frontend@0.0.0 build: `vue-cli-service build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the frontend@0.0.0 build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/Neo/.npm/_logs/2019-12-05T07_07_09_295Z-debug.log

プロダクション・ビルドしようとすると、no-console エラーに引っかかる、ということのようだ。

大したアプリではないので console を使っているのだが、ビルドできないのは困る。しかし手作業でコードを修正するのも面倒臭い。

そこで調べてみたところ、Babel のプラグインを入れれば解消できることが分かった。

まずは以下をインストールする。このプラグインはトランスパイル時に console のコードを削除してくれるモノ。

$ npm install --save-dev babel-plugin-transform-remove-console

続いて、babel.config.js を開く。Vue CLI で生成した直後だと以下のようになっていると思う。

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
};

コレを次のように編集する。

const plugins = [];

// npm run build でビルドする際 console の使用箇所があるとエラーになるので除去する
if(process.env.NODE_ENV === 'production') {
  plugin.push('transform-remove-console');
}

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ],
  plugins: plugins
};

本番ビルドが行われる時は NODE_ENV 環境変数に production という文字列が設定されているので、コレを利用して、プロダクション・ビルドの時だけ console の記述を削除するようにした、というワケ。

コレで一件落着。無事 npm run build も通るようになって良き良き。