Jak mohu sdílet kód mezi Node.js a prohlížečem?

Vytvářím malou aplikaci s JavaScript klientem (spuštěným v prohlížeči) a serverem Node.js, komunikující pomocí WebSocket.

Chtěl bych sdílet kód mezi klientem a serverem. S Node.js jsem teprve začal a moje znalosti moderního JavaScriptu jsou přinejmenším trochu zarezlé. Stále se tedy zabývám funkcí CommonJS require(). Pokud své balíčky vytvářím pomocí objektu ‚export‘, pak nevidím, jak bych mohl použít stejné soubory JavaScriptu v prohlížeči.

Chci vytvořit sadu metod a tříd, které se používají na obou koncích k usnadnění kódování a dekódování zpráv a dalších zrcadlených úkolů. Zdá se však, že balicí systémy Node.js/CommonJS mi brání ve vytváření souborů JavaScriptu, které lze použít na obou stranách.

Také jsem zkusil použít JS.Class, abych získal těsnější model OO, ale vzdal jsem to, protože jsem nemohl přijít na to, jak zajistit, aby poskytnuté soubory JavaScriptu fungovaly s require(). Je tu něco, co mi tu chybí?

Odpověď

Pokud chcete napsat modul, který lze použít jak na straně klienta, tak na straně serveru, mám krátký blogový příspěvek o rychlé a snadné metodě:Psaní pro Node.js a prohlížeč , v podstatě následující (kde this je stejný jako window ):

(function(exports){

    // Your code goes here

   exports.test = function(){
        return 'hello world'
    };

})(typeof exports === 'undefined'? this['mymodule']={}: exports);

Alternativně existují některé projekty, jejichž cílem je implementovat rozhraní Node.js API na straně klienta, jako je Marak's gemini .

Také by vás mohl zajímat DNode, který vám umožňuje odhalit funkci JavaScriptu, takže ji lze volat z jiného počítače pomocí jednoduchého síťového protokolu založeného na JSON.