Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

type module export/import

[es] :: Javascript i AJAX :: type module export/import

[ Pregleda: 1580 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon type module export/import27.11.2018. u 15:36 - pre 64 meseci
Ono kad na native način `include-uješ` ili importuješ objekat iz druge skripte u `glavnu` skriptu.

VaniilaJS Export && VanillaJs import

Falim te (konačno, delimično izgleda :/ ) bože pa ovo radi i u ff i u chrome. Ne mora više da se nakucava ručno u glavu svaki poziv za drugi fajl/skriptu već organizuješ lepo svoj kod i onda ideš dalje .. sa osećajem da je skoro pa kao u svakom normalnom programskom/skripting jeziku gde za najobičnije hebeno očitavanje tekstualnog fajla sa hard diska nije potrebno dodati dodatnih 100 kila koda u vidu neke third-party biblioteke.

Dakle ovako, jedan mali stack-tool (mali js fwk) kojeg sam napisao nešto ranije, pokušavam sada da nateram da radi i sa import/export.
Taj mali fwk radi savršeno i bazira se na Object.create, Object.defineProperty i Object.defineProperties filozofiju.

Naime, taj fwk je dovoljno mali da mu i ne treba nikakav import u toku run-time-a dok document.readystate nije "complete".

A i tada, dok se učitava sve, mogu da 'presretnem' bilo šta dok je state -> `interactive`.

Znači, u jednom fajlu je sve i sve radi savršeno s' tim što varijanta sa da tako kažem `izvozom modula` jednostavno preskače document.readystate `interactive`, a baš tada treba da nakuca u glavu, da kreira još jedan init-modul koji se uvek uspešno učita pre nego li dođe do kraja -body- taga .. Što bi se reklo da je skripta spremna za instant korišćenje u toku run-timea, tj. inicijalizacije.

Ceo fazon je u tome što se body -> onload (kao tag argument) u tom mom fwk-u, zamenjuje sa document.onreadystatechange pa unutra switch (document.readystate) {}.

Ako exportujem pa importujem, js interpreter/parser u potpunosti preskače state.interactive slučaj.
Bez obzira da li ja taj switch premestio iz samog export modula u import skriptu.

Patio sam se sinoć duže od tri sata. Nznm, nešto nisam pročitao, nepto predvideo itd.

Glavno pitanje glasi: kako da iskontrolišem `stanje` u toku učitavanja sa VanillaJS uvozom modula?

Kada u htmlu stoji <script type="module"> interactive mod - ne postoji.

Kada je samo script ili .. type="text/javascript" - nema problema.

Konzola ne pišti nigde, sve je na mestu i sa i bez 'strict mode'; .. i kao type > module i uobičajeno.

Ako je neko željan da me prosvetli a nije mu jasno moje izlaganje, potrudiću se da budem detaljniji.

Hvala unapred.
about:networking
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: type module export/import03.12.2018. u 12:24 - pre 64 meseci
To što ja hteo, izgleda da ne može, tako da sam morao da promenim strategiju.
Ili ja ne znam ili od readystate ostaje samo complete status.

Dakle, manje mesta ima za manipulaciju onda kada native (vanilaJS) export/import igra ključnu ulogu.
A sviđa mi se. Poprilično mi se sviđa to što je javaskripta dobila built-in mehanizam za priključivanje više fajlova.
Bolje ikad nego nikad.

Sada dakle imam dve verzije, pa kada bude ugledalo to što kuckam svetlos' dana, biće izbora:
- Oš' `skrndelj` na export/import (mora i neka novija verzija brauzera) ili ćeš skrnelj da se učita k'o do sad što se učitavao, svugde da radi.

Ova tema može da se zaključa.
Izgleda da nikog živog više i nema ovde na ovom podforumu.
about:networking
 
Odgovor na temu

mjanjic
Šikagou

Član broj: 187539
Poruke: 2679



+690 Profil

icon Re: type module export/import03.12.2018. u 16:25 - pre 64 meseci
JS je podrazumevani skript jezik zako da nema više potrebe za type="text/javascript".

Kod ES5 si mogao da koristiš "require", a kod ES6 se koristi samo "import".


Ne kapiram problem sa document.onreadystatechange. Upakuješ sve funkcije koje pozivaš, kao što je ovde initApplication():
https://developer.mozilla.org/...cs/Web/Events/readystatechange
odnosno, tu staviš sve što se izvršava nakon učitavanja strane.

Za document.readystate imaš ovde opis:
https://developer.mozilla.org/...cs/Web/API/Document/readyState

Dakle, ni dok je vrednost "interactive" nije preporučljivo bilo šta raditi nad dokumentom, jer još nisu učitane slike, CSS stilovi i sl.
Blessed are those who can laugh at themselves, for they shall never cease to be amused.
 
Odgovor na temu

plus_minus

Član broj: 289459
Poruke: 2242
*.dynamic.isp.telekom.rs.

Sajt: https://hardcoder.xyz


+2247 Profil

icon Re: type module export/import03.12.2018. u 22:21 - pre 64 meseci
Citat:
Kod ES5 si mogao da koristiš "require", a kod ES6 se koristi samo "import".


Ovo nisam znao, hvala.
I neka ostane ovako na export/import. Pouzdano.

Što se mog problema tiče, napravi switch od document.readystatechange, ima 3 slučaja (loading,interactive,complete).
Stavi za svaki slučaj nešto u console.info|log(); Dobićeš samo rezultat povodom `complete` slučaja. Ajd' što loading nikada ništa neće dati, nema ni interactive - `identifikacije`.
To ne bi trebalo da se ponaša tako. A ponaša se ako je tip modul. Ako sam u pravu, ecma bug.

U interactive stanju, deo koda je iz document.head.dataset kolekcije izvlačio text za dodatna svojstva i to je imalo značaja za određeni deo procesa.
Ta se mogućnost izgubila sa modulima, ali logično, ima drugih načina i to sada radi kako treba.

Što se ostalog tiče, nije preporučljiv interactive mode zato što ima mnogo nepažnje među native-ubrzanim žiteljima js-a,
inače to je jedna faza u toku celokupnog procesa. I ne vidim razloga zašto bi to bilo amputirano u bilo kom slučaju.

Konkretan primer.

Code:


<head> 
... 
<script src="script.js">
...
</head>


<body>
  <script>MyObject.executeFunction(arg, arg2);</script>
</body>


.. i to radi. Bez provere, tu je. AKO je `nešto` još dodatno urađeno prilikom interactive stanja (to nešto je upucavanje recimo novog svojstva u sami objekat), onda dok se nije sve inicijalizovalo skroz, ali jeste DOM spreman za manipulisanje, što je baš ono zgodno.

A kao modul, ako hoću recimo instant korišćenje/vezivanje i kačenje `eventa` tik nakon završetka </*unameit> taga, mora type=module svugde, iako to što pozivam, nije nikakav modul.

Code:

kao modul

<head> 
... 
<script type="module" src="script.js">
...
</head>
<body>
  <script type="module">MyObject.executeFunction(arg, arg2);</script>
</body>


U protivnom neće da radi.

Za sada to što pravim, ne oslanja se direktno na `promise`s. Ko bude koristio, takođe neće morati, ako ne želi.
Nekako mi crno mnogo to da se oslanjam na obećanja od javaskripte.

[Ovu poruku je menjao plus_minus dana 03.12.2018. u 23:39 GMT+1]
about:networking
 
Odgovor na temu

[es] :: Javascript i AJAX :: type module export/import

[ Pregleda: 1580 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.