2

環境に基づいてパブリックJavaScriptファイルをカスタマイズしようとしています。具体的には、socket.ioの場合、クライアントが接続する場所をカスタマイズしようとしています。

発達:

var socket = io.connect('http://localhost/chat');

製造:

var socket = io.connect('http://xxx.xxx.xxx.xxx/chat');

アプリ自体の環境変数についてはすべて知っていますが(エクスプレスを介してノード環境変数を使用しています)、これらの変数は、クライアントに提供しているパブリック静的jsファイルには影響しません。

開発/本番環境に基づいてこのコンテキストスイッチを実現するための最良の方法は何ですか?

4

2 に答える 2

1

控えめなJavaScriptを記述し、適切なバンドルシステムを使用している場合、配信する各HTMLページは、残りのすべてのスクリプトを取り込む責任がある単一の「ローダー」スクリプトのみを参照する必要があります。そのスクリプトの2つのバージョンを作成します。1つは開発用、もう1つは本番用で、異なる名前を付けます。HTMLをレンダリングするときは、スクリプトの名前を、環境に基づいて設定するテンプレート変数にします。ローダースクリプトは、それが持ち込むスクリプトで使用される適切な変数を設定できます。

于 2012-08-01T05:39:58.270 に答える
0

私がアプローチした方法は、レイアウトページにsocket.ioをロードすることでした。

<script src='<%= socketIoUrl %>/socket.io/socket.io.js'></script>

<script type="text/javascript">
    var socket = io.connect('<%= socketIoUrl %>');
</script>

次に、動的ヘルパーを追加して、socketIoUrl:を公開しました。

var helpers = function(app) {

    app.dynamicHelpers({
        socketIoUrl: function(req, res) {
            return app.settings.socketIoUrl;
       }
    });
};

module.exports = helpers;

そのため、server.jsファイルで、環境に基づいて適切な値を設定し、ヘルパーファイルをロードしました。

app.configure('development', function(){
    app.set('socketIoUrl', 'http://localhost:3003');
});

app.configure('test', function(){
    app.set('socketIoUrl', 'http://...');
});

app.configure('production', function(){
    app.set('socketIoUrl', 'http://...');
});

require('./apps/helpers')(app);

これsocketで、レイアウトページで作成された変数を他のjsファイルで使用できるようになりました。

于 2012-08-01T07:29:28.153 に答える