1

を実行lein figwheelすると、私の理解では、ポート 3449 の舞台裏で単純な静的ホスティング サーバーが (リング経由で) 起動されます。これは私のシステムで動作します。

問題は、ポートで node.js を介して自分のファイルをホストしていることです3000。figwheel を実行してから、express.js サーバーを起動すると、フロントエンド ファイルを変更すると、奇妙にも両方のポートに同じ影響が及びます (つまり、ファイルを更新すると、両方のページがすぐに再レンダリングされます)。

質問:3000しかし、figwheel が express.js ポートサーバーについて何も知らない場合、これはどのように可能でしょうか? そして、いずれにせよ、これは自分の高速サーバーで figwheel を使用する最良の方法ですか (つまり、2 つのインスタンスを実行し、1 つのデフォルトは 3449 で、自分のポートは 3000 です)。

4

1 に答える 1

2

このページは、ClojureScript から構築された JavaScript を実行しています。ビルドには figwheel クライアント コードが含まれています。figwheel クライアントからのコードは、事前定義された場所への Websocket 接続を開きます。ページがホストされている場所は関係ありません。JavaScript は事前定義された WebSocket エンドポイントに接続しようとします。したがって、3000 のサーバーからページをロードすると、作成したサーバー プロセスに対して websocket が確立されます。lein figwheel. 重要なのは、figwheel クライアント コードと figwheel サーバーがあることです。figwheel サーバーはファイルシステムを監視し、ファイルが変更されたときに WebSocket 接続に通知します。figwheel クライアントは、既知の websocket に接続し、アーティファクトをリロードする指示をリッスンしているだけです。したがって、既に発見したように、静的コンテンツを提供するために figwheel を使用する必要はありません。

「これが最善の方法ですか?」まあ、それはあなたの目標に完全に依存しています。確かにそれはうまく機能するので、両方を実行することに利点がある場合は、それを試してください! 一方、エクスプレス サーバーが必要ないのに、なぜ実行するのでしょうか。

2 つのサーバーを実行することが有利な状況の 1 つは、figwheel をホストとして使用するのに適していないサーバー側の機能に依存している場合です。これは、展開 (リング ハンドラーをプライマリ サーバーとして使用したくない可能性があります)、または技術的な制限 (Websocket に httpkit を使用するのが好きですが、これらを実行する良い方法がないことがわかっています) が原因である可能性があります。リングハンドラー)。ただし、ご指摘のとおり、ファイルやサービスの提供に figwheel を使用していない場合でも、開発を高速にリロードするために figwheel を使用できます。

明らかに、figwheel サーバーは正しいファイルを監視する必要があるため、figwheel が正しいディレクトリを監視するように構成されていることを確認してください。

于 2016-02-29T03:27:17.080 に答える