Hogyan készítsünk JavaScript kompatibilis mind kliens és szerver oldali?




Azt tudom, hogy modulok NodeJS (ez meglehetősen egyszerű). Azonban, ha azt szeretnénk, hogy valamit, ami feltehetőleg működik mind szerver és kliens oldali környezetben, akkor azt, hogy egyszer elérni ezt?


Képzeljük el, hogy szeretne létrehozni egy modell típusát ( „osztály”). Tegyük fel, hogy van egy class-teremtés nevezett funkció `Lib.define()`. Tehát írtad ezt:



```
Lib.Model = Lib.define({
    init: function() {
        // constructor...
    },

    save: function() {
        // saves the model.
    }
});

```

A fenti kód tenné Lib.Model egy objektumot, ami egy instantiable típusát. Azonban, hogy hogyan írnál úgy, hogy ez is NodeJS kompatibilis? Ha megpróbálja megköveteli a fenti fájlt ( `require('Model.js')`), akkor nem csinál semmit, mivel nincs hozzárendelés `export`. Ha azonban sikerül, akkor én csak állítólag van egy felesleges `export`tárgy kliensoldali környezetben?


Van más módja van ennek mellett szükség, amelyek egyszerűen betölteni és feldolgozni a JS és a munka világszerte úgy, hogy a fenti kódot hozna `Model`tagja a globális változó `Lib`?


I am looking be [vm](http://nodejs.org/docs/v0.4.8/api/vm.html) most, de nem vagyok biztos benne, hogy fogok én használni rendesen. Van egy fájl / osztálybetöltője hogy megoldja utak és rengeteg szkriptek, mint amit Dojo csinál. Írjak némi logika, hogy ott a megszokott módon működik a kliens oldali (helyezi szkriptcímkéket), és NodeJS, egyszerűen kiolvasta a fájl tartalmát, és `vm.runInThisContext(code)`?.
[JSHint](http://jshint.com) csak érzékeli, hogy van egy `exports`szimbólum, és hozzáteszi, hogy ez, ha van. Az ellenőrzés a következőképpen néz ki:



```
// Make JSHINT a Node module, if possible.
if (typeof exports == 'object' && exports)
    exports.JSHINT = JSHINT;

```

Ez ellenőrzi, hogy `exports`van egy objektumot, majd ellenőrzi, hogy ez nem `null`(via `&& exports`). Úgy tűnik, hogy ésszerű megoldást, bár természetesen ez jellemző a [CommonJS modulrendszer](http://wiki.commonjs.org/wiki/Modules/1.1) (ami Node használ).
Készítem. Ebben a videómban magyarázom is:  

<https://www.youtube.com/watch?v=j3pI9tPn30I&list=PLwXxAxAEOlGi9V6gg5-bKzSjBVAQMubor&index=2> Ez az én véleményem, de; csakúgy, mint az ügy osztály igen, azt végre egy `copy`módszert a fajta, hogy az osztály, hogy a módosítás lehetővé, miközben a megváltoztathatatlan, de létezik néhány esetben, hogy nem tudok segíteni, hogy azt változékony; például, ha valami várható, hogy a másolási művelet túl nagy és lassú az osztály; Szeretem, ha az osztály annyi gyakran módosított tagjai. És ne aggódj ezer esetben lebeg a memóriában, mert automatikusan GC'ed, így a több tényleges problémát az idő költsége másol az osztály példányok. Kérem, mondja meg, véleményem szerint valahogy rossz :) Szia!  

Érdemes esetleg meglesni a mintamegoldást :)   

Vagy egy kód ide sokat segítene. A konkrét file-típus ismerete hiányában a következőket tudom javasolni: 

*A csoportba feltöltött és megosztott fájlok a csoport minden tagja számára elérhetők. Webes Office az Android vagy iOS rendszerű Office-ban, illetve a Microsoft 365 legújabb alkalmazásaiban Ön és tagjai közösen szerkeszthetik a Word, a PowerPoint vagy az Excel dokumentumait, illetve megjegyzéseket végezhetnek a Visio-fájlokban. Nem kell a fájlokat ellenőrizni vagy aggódnia, ha valamelyik munkatársa meg van nyitva. Csak nyissa meg a szerkeszteni kívánt fájlt, és ha a többi csapattag is szerkeszti őket, akkor a módosítások zökkenőmentesen lesznek egyesítve munka közben.*

Röviden az MS file-okat megosztva közösen szerkeszthetik. (mindenki egyenlő jogokkal)   
Ha megoldandó feladat vagy dolgozatról van szó a Forms-ot ajánlom és a teszt kiadást MS Teams-ben. a megoldás (ami jól működik) a következő: order status for woocommerce pro program. a lényeg, hogy a free verzióban már a rendelési státuszokat létre lehet hozni, ahogy szeretnénk. ezt követően, hogy a email-ok is szinkronban működjenek a rendelési státuszokkal már a pro verziót kell megvásárolni. n… Nem lehet, ez az információ nem küldi el a szerver nyilvánvaló biztonsági okokból. Csak a fájlnevet küldeni a szerverre. Így nem tárolja a fizikai útvonalat, ahol a fájl származik a kliens gépen a szerveren. Szia!


Ajánlom figyelmedbe a CSS media query-ket. Az alap koncepció az az, hogy képernyő szélesség alapján állapítjuk meg, hogyan kell megjelennie a tartalomnak. Itt lenne egy példa:



```
.elem {
  display: inline-block;
  width: 50%;
}
/* Maximum képernyő méret amin lefut ez a css kód, ellenkető esetben a fent látható fog lefutni */
@media only screen and (max-width: 768px) {
    /* Mobilokon */
    .elem {
        width: 100%;
    }
}

```

Itt lenne egy részletesebb leírás a CSS selectorokról: <https://www.w3schools.com/css/css_rwd_mediaqueries.asp> A `string` egy álnév (alias) a C#-ban a `System.String`-re.  

Szóval gyakorlatilag nincs különbség. Olyan mint az `int` és a `System.Int32`.


Ha már elvek, akkor általánosan ajánlott a `string` használata bármikor, amikor egy objektumra hivatkozol:  

Például:



```
string place = "world";

```

Hasonlóan, szerintem általánosan ajánlott használni a `String`-et, amikor konkrétan az osztályra szeretnél hivatkozni:  

Például:



```
string greet = String.Format("Hello {0}!", place);

```

Ez az a stílus, amit a Miscrosoft a [példáiban használ](https://docs.microsoft.com/en-us/dotnet/api/system.string.format?view=netframework-4.7.2#examples).


Úgy tűnik ez az elv ezzel kapcsolatban változhatott, ahogy a [StyleCop](https://github.com/StyleCop) most már a C# specifikus alias-ok használatát javasolja. Ha meg akarod érteni az ilyen feladatokat, egy videót ajánlok:  

<https://www.youtube.com/watch?v=oqP_oIKNuvU> Az első két feladatban az azonos nemű kifejezések összevonását kell elvégezni. Míg a többiben a zárójelek felbontása és a kijelölt műveletek elvégzése után végezhetők el az azonos neműek összevonása. (Emlékeztető: azonos neműek azok az algebrai kifejezések, amelyeknél az alap és a kitevő azonos, de a hozzájuk tartozó együttható különbözhet.) Tehát konkrétabban:  

a.) `2a-1+4b-a+3b+b-4a-10b+3a-2=-2b-3`  

b.) `2b+5-2a+4a+3b-1+4b-3a-7-3b=-a+6b-3`  

c.) `(3a-2)(a-1)-3a^2+3a+1=3a^2-3a-2a+2-3a^2+3a+1=-2a+3`  

d.) `(4a-b)(2a+1)-(8a+3)(a+2)-2b+2ab=8a^2+4a-2ab-b-8a^2-16a-3a-6-2b+2ab=-15a-3b`  

e.) `(3a-2)(2a-b)-6(a-3)(a+b)-b(11-9a)=6a^2-3ab-4a+2b-6a^2-6ab+18a+18b-11b+9ab=14a+9b`