Node.jsin viimeisin suuri vapautuminen julkaisee monia merkittäviä parannuksia JavaScript-yhteisöön, mukaan lukien päivitetty JavaScript-moottori, NPM-versio 5, Googlen V8, Node.js API, Async_hooks, Whatwg Url Parser, turvallisempia puskureita ja paljon muuta. Täällä voimme päivittää sinut näillä ominaisuuksilla ja muut tämän julkaisun tärkeimmät näkökohdat.
Solmu.js 8 vapautetaan koodin nimen hiilellä, ja se on nyt saatavilla Solmu.js sivusto . Se toimitetaan aktiivisesti 18 kuukauden ajan (ei uusia ominaisuuksia, vain virheenkorjauksia, tietoturvaparannuksia ja NPM-päivityksiä), ennen kuin menee huoltotilaan. Kuten aiemmissa julkaisuissa, huoltotilan julkaisut saavat vain kriittisiä tietoturvapäivityksiä ja virheenkorjauksia.
On turvallista sanoa, että koska solmu.js on ollut ympärillä, tämä on yksi suurimmista päivityksistä, joita Runtime on koskaan saanut - se muuttuu kuinka natiivit lisäosat on kirjoitettu ja tuo myös lisää turvallisuutta ja suorituskyvyn parannuksia.
Riskejä On auttanut yrityksiä menestymään solmulla. JJ: llä neljä vuotta koulutuksen, konsultoinnin tai kehityksen kanssa. Yksi suurimmista kamppailuista, joita olimme lisänneet alkuperäisiä riippuvuuksia hankkeisiin.
Ennen solmua.js 8, jos sovellukset ovat riippuvaisia alkuperäiskoodin moduuleista, aina, kun suuret uudet solmut.js-versiot saapuivat sovelluksen ylläpitäjältä, jonka sinun oli yhdistettävä riippuvuuksistasi. Jos olisit onnekas, he työskentelivät aluksi.
Tämä prosessi oli mahdollista, kun valtavat työmoduulin ylläpitäjät, jotka tekivät moduulit toimivat yhteensopimattomien solmujen yli.
Tämä prosessi on kaukana ihanteellisesta, koska paljon yritykset eivät saaneet riippuvuuttaan päivitettäessä, jos niitä ei voitu koota, ja se myös laittaa valtava ylimääräinen työmäärä moduulin ylläpitäjille. Tämän ongelman ratkaisemiseksi otettiin käyttöön solmu.js API (tai N-API).
Solmu.js API on yksi merkittävimmistä Node.js 8. Se tuo selvästi määritellyn ABI (sovellusbinaarisen liitäntä) solmulle.js tehdä virtuaalikoneen agnostikko. Tämä tarkoittaa sitä, että natiivi moduulit eivät toimi pelkästään erilaisten solmujen .js-versioiden kanssa Googlen V8 JavaScript -moottorin avulla, mutta Microsoftin Chakralla.
Nyt N-API on kokeellisessa tilassa, mikä tarkoittaa, että molemmat toteutus että API voivat tapahtua merkittäviä muutoksia. Tällöin mainittu, natiivi moduulin ylläpitäjät kannustetaan kokeilemaan uutta käyttöliittymää ja antamaan palautetta.
Jos olet moduulin ylläpitäjä, voit vapauttaa moduulin N-API-version rinnakkain päämoduulin version kanssa. Tehdä niin, virallinen suositus on julkaistava moduulin versio N-API-tunnisteen kanssa NPM: lle.
Julkaise N-API-versiota, sinun täytyy:
Tällä tavoin varmistat, että N-API-versio ei tule viimeisimpään julkaisuun, joten jos joku asentaa moduulin, oletuksena ne saavat N-API-version.
Lanka, Facebookin insinöörien luoma pakettipäällikkö julkaistiin lokakuussa 2016. Se yritti käsitellä virallisen NPM-asiakkaan puutteita enimmäkseen esittämällä ja deterministinen. Suurin osa näistä innovaatioista on esillä myös NPM 5: ssä.
Aivan kuten lanka, NPM 5 esitteli lukitustiedostomekanismin - Aina kun asennat uutta riippuvuutta projektisi, se lisätään automaattisesti paketti.json , mutta uusi tiedosto nimeltä Package-Lock.json yhtä hyvin.
Voit kysyä, mikä ero on välillä Package-Lock.json ja NPM-Shrinkwrap.json , kun NPM-kutistuminen on ollut NPM: ssä aina ikuisesti? Pitkä tarina lyhyt, ne ovat olennaisesti samoja, mutta Package-Lock.json luodaan automaattisesti.
Heidän tarkoituksena on kuvata tarkalleen, mitä riippuvuuspuun NPM on luotava pakettisi. Jos sinulla on molemmat, NPM-Shrinkwrap kestää etusijalla. Perustuu NPM: n suositukseen, sinun pitäisi käyttää NPM-Shrinkwrap.json Jos haluat julkaista sen, niin moduulisi kuluttajat käyttävät sitä myös. Toisaalta sinun on käytettävä paketti-lock.json sisäisesti - jopa tarkistettava arkistoiksi.
Mutta NPM 5: n parannuksia ei ole pysähtynyt lisäämällä lukitustiedostoa - uudella versiolla, kaikki asennat moduulit tallennetaan automaattisesti, ja ne lisätään sekä sinun paketti.json ja Package-Lock.json tiedosto.
Myös NPM-komentosarjat ovat myös muuttuneet hieman. Ensinnäkin, esiasennetut skriptit toimivat nyt ennen kaikkea muuta, joten he voivat muokata Node_modules-hakemistoa ennen kuin CLI todella lukee sen. Tämän lisäksi on lisätty kaksi uutta komentosarjaa - prepack ja postpack. Molemmat toimivat NPM Pack ja NPM julkaisevat myös, mutta eivät NPM-asennusta.
Sydämen sydämessä.js on JavaScript-moottori, joka tulkitsee JavaScript-koodin, luo Bytecode It ja antaa sovelluksesi. Uusi solmu.js 8 julkaisu, tämä päivitettiin myös.
Päivitetyn V8-moottorin avulla otetaan käyttöön suuria suorituskyvyn parannuksia - mutta vielä tärkeämpää, sillä on taatusti eteenpäin yhteensopiva sovellusbinaarinen käyttöliittymä. Tämä tarkoittaa, että solmu.js pystyy päivittämään V8-moottorin ilman suurta solmua.js-julkaisua.
Tämä on ratkaisevan tärkeää, sillä V8-moottorin uudet versiot esittelevät uuden kääntäjän putkilinjan, joka ottaa käyttöön lisää suorituskyvyn parannuksia Node.js. Tämä päivitys oli niin tärkeä, että se oli syy alkuperäinen solmu.js 8 julkaisupäivää lykättiin.
Nykyinen putki on liian monimutkainen ja uuden kielen ominaisuuksien käyttöönotto tarkoittaa yleensä koskettamalla useita putkilinjan osia. Uuden putken kanssa se tulee paljon yksinkertaisemmaksi.
Sytytys, uusi tulkki ja Turbofan, uusi optimointi kääntäjä, ovat olleet kehittymässä lähes kolme ja puoli vuotta. Ne ovat perusta, johon rakennetaan uusia kieliominaisuuksia. Niihin kuuluu kokemus, jonka Googlen V8-tiimi keräsi todellisen elämän JavaScript-sovellusten mittaamisesta.
Parempi ymmärtää, mitä Async koukut ovat, ota askel taaksepäin ja tarttuu ensin jatko-paikalliseen varastointiin. He työskentelevät kuin kierre-paikallinen varastointi kierteitetyssä ohjelmoinnissa, mutta solmussa.js käyttää soittopyyntöjä alas konteksti.
Kuvittele, että kirjoitat sovelluksen, joka hakee tuotteen tietokannasta, sitten myöhemmin haluat lähettää sen HTML-vasteessasi:
CONT CretaneNamespace = edellyttävät ("jatkoa paikallisvarasto"). CretaneNamespace
consess session = CretaneNamespace ('My-App-Session')
const db = vaatia ('./ db.js')
Toiminto onrequest (vaihtoehdot, seuraava) {
db.fetchuserbyid (asetukset.id, toiminto (virhe, käyttäjä) {
Jos (virhe) {
Palaa seuraavaksi (virhe)
}
Session.set ('käyttäjä', käyttäjä)
Seuraava()
})
Myöhemmin, jos haluat käyttää käyttäjänobjektia, sinun tarvitsee vain tarttua paikalliseen tallennustilaan:
const getnamespace = vaatia ("jatkoa paikallisvarasto"). Getnamespace
cons session = getnamespace ('minun istunto')
const render = vaatia ('./ render.js')
Toiminto viimeistely (vastaus) {
const user = session.get ('käyttäjä')
Render ({käyttäjä: käyttäjä}). Putki (vastaus)
}
Tätä tekniikkaa käytetään laajasti sovellusten suorituskyvyn valvontapalvelujen tarjoajilta, kuten Risingstack-jäljiteltynä, jotta se pysyy täytäntöönpanon yhteydessä ja keräävät valvontajärjestelmää tuotantojärjestelmistä.
Async-koukkuilla samanlainen ominaisuus siirretään solmulle.js-ytimeen - se auttaa seuraamaan asynkronisia pyyntöjä ja käsittelijöitä elinkaarensa kautta. The async_hooks Moduuli tarjoaa sovellusliittymän rekisteröimään soittimien, jotka liittyvät solmun sisällä luotujen asynkronisten resurssien käyttöikään.
Ennen solmua.js 8, jos halusit käyttää ydinmoduuleja sovelluksessa, joka käyttää lupauksia, sinun oli käsiteltävä manuaalisesti ydinmoduulit, jotta niitä voitaisiin käyttää samalla tavalla. Se katsoi jotain tällaista:
const fs = vaatia ('FS')
Toiminto ReadFilePromise (... args) {
Palauta uusi lupaus ((ratkaise, hylkää) = & gt; {
F.ReedFile (... args, (virhe, tulos) = & gt; {
jos (err) {
Palautusratkaisu (ERR)
}
Ratkaise (tulos)
}))
}))
}
ReadFilePromise ('./ package.json', 'UTF-8')
.then ((res) = & gt; konsoli.log (res))
.Catch ((ERR) = & GT; CONSOLE.LOG (ERR))
Solde.js 8: n kanssa lisätään uusi avustajamenetelmä UTport Core -moduuliin, HULT.PROMISIFY. Se mahdollistaa standardin solmu.js callback-tyylisiä sovellusliittymiä kääritään toimintaan, joka palaa lupauksia.
Tämän toiminnon käyttäminen, yllä mainittu katkelma on yksinkertaistettu ja siitä tulee tämä:
Constr FS = Vaadi (FS ")
consm sivifioida = vaatia ('UTPORT'). Lupaa
ReadFilePromise = lupaa (F.Readfile)
ReadFilePromise ('./ package.json', 'UTF-8')
.then ((res) = & gt; konsoli.log (res))
.Catch ((ERR) = & GT; CONSOLE.LOG (ERR))
Ennen kuin solmu.js versio 8, uuden puskurin (numero) rakentajan avulla varatut puskurit eivät alustaneet muistitilaa nollalla. Tämän seurauksena uudet puskurivaikutukset voisivat sisältää arkaluonteisia tietoja, mikä johtaa vakaviin turvallisuusongelmiin - jopa suosittuja moduuleja, kuten mongoosia, WS tai pyyntömoduulia.
Mutta miten pääsimme sinne? Kun JavaScript siirrettiin selaimesta palvelinpuolelle, on tarpeen nopeaa ja helppoa tietojenkäsittelyä varten - joten puskuriluokka lisättiin. Puskuri on binaaritietojen mutakari. Kun sitä käytetään rakentajan kanssa, joka pyytää uuden puskurin kokoa, se vain varajasi muistitilan, mutta ei puhdistanut sitä.
Koska palvelimesi voi palvella useita käyttäjiä samanaikaisesti (toisin kuin selaimesi), on mahdollista, että juuri myönnetty muistitila sisältää arkaluonteisia tietoja muista käyttäjistä (jopa salasanat!), Ja voi olla alttiina hyökkääjälle.
Vaikka se oli tahallinen päätös uuden puskurin luomisen edistämiseksi useimmille meistä, se ei ollut käyttötarkoitus - vaikka se olisi dokumentoitu. Tästä johtuen solmu.js 8: n alkaessa Buffers, jotka on varattu uudella puskurilla (numerolla) tai puskurilla (numero), täytetään automaattisesti nollalla.
Ennen solmua.js 8, jos haluat debugoida solmusi.js-sovelluksia, yksi helpoimmista ratkaisuista oli käynnistää sisäänrakennettu virheenkorjaus, solmun virheenkorjaus index.js. Solmu.js 8: n kanssa tämä poistetaan ja korvataan solmu-tarkastajalla. Voit silti käyttää CLI-debuggeria, mutta se poistetaan pian.
Tästä lähtien sinun pitäisi käyttää solmua - Sitten index.js tai solmu --Sipect-brk-index.js Jos haluat debuggerin laittaa rikkomuksen sovelluksen ensimmäisellä rivillä. Kun olet suorittanut sen, saat WebSocket-linkin, jonka Google Chrome voi käyttää Debuggerin liittämistä.
Sinun pitäisi mennä yli Chrome: // tarkastaa Chrome-selaimessa, ja se tunnistaa automaattisesti käynnissä olevan solmun.js-sovelluksen, jonka avulla voit muodostaa yhteyden. Kun olet liittänyt prosessiin, saat Chromen debuggerin tarkastamalla käynnissä oleva solmu.js-sovellus.
Aikaisemmin, jos halusit tarkistaa virheen, jonka sait Runtime ja toimii useimmissa tapauksissa sinun täytyi tarkistaa virheilmoitus. Tämä oli virhe alttiita, koska virheilmoitukset ovat muuttuneet uudella solmulla.js-versioilla.
Solmu.js 8: llä staattiset virhekoodit on osoitettu useimmille virheille - se on edelleen edistystä, mutta kun se on valmis, nämä virhekoodit eivät muutu, vaikka viesti virheessä .
Esimerkiksi äskettäin otettu käyttöön Whatwg URL API heittää Err_invalid_url Virhe seuraavassa katkelmassa, koska parametri ei ole kelvollinen URL-osoite:
CONT URL = vaatia ("URL-osoite). URL
cons myurl = uusi URL ('/ foo')
Kuten näette, solmun julkaiseminen.JS 8 -päivitys on tuonut runsaasti uusia ja jännittäviä parannuksia JavaScript-yhteisöön. Aloita kokeilemalla kaikkia näitä uusia ominaisuuksia itseäsi, päätä nodejs.org , Lataa solmu.js 8 binäärinen ja aloita pelaaminen uuden työkalujen kanssa!
Tämä artikkeli oli alun perin ilmestynyt Net-aikakauslehti Julkaisu 296. Osta se täällä .
Aiheeseen liittyvät artikkelit:
3D-alan kasvun koko vuoden kuluttua on tärkeämpää kuin koskaan varmistaa, että työsi erottuu joukosta. Riippumatta siitä, mitä taitotasosi 3D-taiteilijana on avainperiaatteita, jotka ..
Houdini 17: ssä Sidefx esitteli joitain uusia työkaluja ja lisäsi muita, jotta taiteilijoiden mahdollisuuksien laajentaminen, ..
GreenSock Animation Platform (GSAP) mahdollistaa animoivan mitä tahansa, mitä voit käyttää JavaScriptin, mukaan lukien DOM, ..
Sivu 1/2: Tee kojelaudan sovellus reagoida - vaiheet 1-10 Tee kojelaudan ..
Menetetty rakkaus Kanadan Jam3 on kauniisti tumma, mobiili-valmis interaktiivinen runo, jolla on todellinen sydän kestä..
Olen opiskellut taidetta ja Maalaustekniikat Ja pitkään oli täysin ajatus digitaalista ajatusta. En vain nähny..
Ei ole mitään rakastan paremmin kuin ulkona maalaamalla maailmaa ympärilleni, mutta se oli ehdottomasti kamppailu minulle, kun aloitin ensin Gouche. Työskentely tuntemattomassa maalausvä..