LoginSignup
0
0

More than 1 year has passed since last update.

HTTPS に対応している vue-cli のバージョンアップで沼にハマった

Posted at

概要

10年ぶりくらいに、フロントエンドに専念することになって、新規サービスを立ち上げた当初の vue-cli をバージョンアップしたら見事に沼にはまったので、備忘録がてらハマった内容と対応策を記事にまとめておく

vue-cli のバージョンアップ

vue-cli を 4.5.0 → 5.0.4 に upgrade した
ドキュメントどおりに素直に

$ vue upgrade

を実施

何が起きたか

1. https options は deprecated だぜって言われる

アプリケーション起動時に下記のようなメッセージが表示された

(node:73202) [DEP_WEBPACK_DEV_SERVER_HTTPS] DeprecationWarning: 'https' option is deprecated. Please use the 'server' option.

アプリケーションは動作しているが、deprecated なのは気になるので対応したい
その時の vue.config.js はこんな感じ

module.exports = {
  ...,
  devServer: {
    https: {
      key: fs.readFileSync('/path/to/key.pem'),
      cert: fs.readFileSync('/path/to/cert.pem'),
    },
  },
};

2. server option に移行させると insecure な WebSocket だって言われる

use the 'server' option. って言われているので、server option に https 対応を移行させる

module.exports = {
  ...,
  devServer: {
    server: {
      type: 'https',
      options: {
        key: fs.readFileSync('/path/to/key.pem'),
        cert: fs.readFileSync('/path/to/cert.pem'),
      },
    },
  },
};

これで、アプリケーションを起動すると 1. と同じようにアプリケーションは起動するが、ブラウザ側で下記のようなエラーメッセージが出力されて何も動かない状態に。。
スクリーンショット 2022-05-06 16.17.24.png

WebSocket なんて聞いてないぞ。。

3. WebSocket の client option を追加

分からなすぎて、vue-cli の migration guide を一通り読んで見たところ、WebSocketに関連する option を発見したので追加してみた
https://github.com/webpack/webpack-dev-server/blob/master/migration-v4.md

module.exports = {
  ...,
  devServer: {
    host,
    port,
    server: {
      type: 'https',
      options: {
        key: fs.readFileSync('/path/to/key.pem'),
        cert: fs.readFileSync('/path/to/cert.pem'),
      },
    },
    client: {
      webSocketURL: {
        hostname: host,
        port,
        pathname: '/ws',
      },
    },
  },
};

host, port は devServer と同じものを指定
この client option を追加することで、WebSocket の問題も解決し、https option の deprecation も解決した :tada:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0