npmのlive-serverは特定の条件で自動更新されないので注意

live-serverとは

ファイル修正時のブラウザの自動更新(ライブリロード)機能を備えた開発サーバーのnpmパッケージ。

VS Code拡張機能のLive Serverとは別物です。

npm i live-serverでローカルインストール、npm i -g live-serverでグローバルインストールできます。

npm i live-server
or
npm i -g live-server

すぐに実行させる場合はローカルならnpx live-server、グローバルはlive-serverで実行できます。

簡単に開発サーバーを起動できて便利ですが、特定の条件下だとブラウザの自動更新(ライブリロード)機能が使用不可になるので注意が必要です。

headとbodyがないと自動更新されない

live-serverはデフォルトでブラウザの自動更新(ライブリロード)機能が有効になっていますが、HTMLファイル内にheadとbodyタグが含まれていないと自動更新されません。

これはブラウザの自動更新はHTML内のheadまたはbodyタグ内に自動更新用のJavaScriptを以下のように追加して動作しているからです。

見ての通り、正しく動作していればConsoleに「Live reload enabled.」と表示されます。

<!DOCTYPE html>
<html lang="ja">
<head>
<title>Sample</title>
</head>
<body class="vsc-initialized">
<h1>Sample</h1>
<!-- Code injected by live-server -->
<script type="text/javascript">
  // <![CDATA[  <-- For SVG support
  if ('WebSocket' in window) {
    (function() {
      function refreshCSS() {
        var sheets = [].slice.call(document.getElementsByTagName("link"));
        var head = document.getElementsByTagName("head")[0];
        for (var i = 0; i < sheets.length; ++i) {
          var elem = sheets[i];
          head.removeChild(elem);
          var rel = elem.rel;
          if (elem.href && typeof rel != "string" || rel.length == 0 || rel.toLowerCase() == "stylesheet") {
            var url = elem.href.replace(/(&|\?)_cacheOverride=\d+/, '');
            elem.href = url + (url.indexOf('?') >= 0 ? '&' : '?') + '_cacheOverride=' + (new Date().valueOf());
          }
          head.appendChild(elem);
        }
      }
      var protocol = window.location.protocol === 'http:' ? 'ws://' : 'wss://';
      var address = protocol + window.location.host + window.location.pathname + '/ws';
      var socket = new WebSocket(address);
      socket.onmessage = function(msg) {
        if (msg.data == 'reload') window.location.reload();
        else if (msg.data == 'refreshcss') refreshCSS();
      };
      console.log('Live reload enabled.');
    })();
  }
  // ]]>
</script>
</body>
</html>

そのため、以下のようにheadとbodyがない場合は自動更新が無効になります。

<!DOCTYPE html>
<html lang="ja">
<title>Sample</title>
<h1>Sample</h1>
</html>

これはlive-serverだけでなく、ほかの開発サーバーを起動可能なnpmパッケージでも同様なので、ブラウザの自動更新が動作しない場合はHTML構造が正しいか確認したほうが良いです。