Node.js 20-ի վերջին թողարկումը բազմաթիվ նոր հնարավորությունների, թարմացումների և բարելավումների է բերել հանրաճանաչ JavaScript-ի գործարկման ժամանակին: Կարևորություններից են Node.js Permission Model-ի ներդրումը, համաժամանակյա import.meta.resolve-ը, կայուն test_runner-ը, V8 JavaScript շարժիչի թարմացումները և Ada 2.0-ի գործարկումը:

Որպես աութսորսինգ ընկերություն, որը նվիրված է տեխնոլոգիական արդյունաբերության վերջին զարգացումների մասին տեղեկացված լինելուն, այս հոդվածը ուսումնասիրում է Node.js 20-ի ուշագրավ փոփոխությունները և դրանց հնարավոր ազդեցությունը տարբեր հավելվածների վրա:

Node.js 20-ի ամենաուշագրավ փոփոխությունները

Թույլտվության մոդել

Node.js թույլտվության մոդելը, որը ներկայացվել է որպես Node.js 20 թողարկման փորձարարական հատկանիշ, նպատակ ունի բարձրացնել հավելվածների անվտանգությունը՝ տրամադրելով մեխանիզմ՝ սահմանափակելով մուտքը կոնկրետ ռեսուրսների կատարման ընթացքում: Վերահսկողության այս ավելացված շերտը ծրագրավորողներին թույլ է տալիս սահմանափակել մուտքը դեպի համակարգի տարբեր ռեսուրսներ, ինչպիսիք են ֆայլային համակարգը, child_process, worker_threads և հայրենի հավելումներ: Կիրառելով այս սահմանափակումները՝ մշակողները կարող են ավելի լավ պաշտպանել զգայուն տվյալները և նվազեցնել չարտոնված մուտքի կամ մանիպուլյացիայի ռիսկը:

Թույլտվության մոդելը միացնելու համար մշակողները կարող են օգտագործել — փորձարարական թույլտվության դրոշը ցանկալի թույլտվությունների հետ մեկտեղ: Օրինակ, եթե նրանք ցանկանում են սահմանափակել մուտքը դեպի ֆայլային համակարգ (ինչպես կարդալ, այնպես էլ գրել), նրանք կարող են օգտագործել — allow-fs-read և — allow-fs-write դրոշները: Այս հատիկավոր հսկողությունը ծրագրավորողներին թույլ է տալիս ճշգրտել իրենց Node.js գործընթացների մուտքի մակարդակը ֆայլային համակարգի որոշակի մասեր:

Մշակողները կարող են նաև նշել ֆայլային համակարգ մուտք գործելու որոշակի ուղիներ՝ ստորակետերով բաժանված արժեքները փոխանցելով դրոշներին: Օրինակ, նրանք կարող են թույլ տալ գրելու մուտք դեպի /tmp/ թղթապանակ և կարդալու մուտք դեպի /home/index.js ֆայլ՝ օգտագործելով հետևյալ հրամանը.

node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js

Բացի այդ, wildcard-ի նախշերը կարող են օգտագործվել միաժամանակ մի քանի ֆայլերի կամ թղթապանակների հասանելիություն տրամադրելու համար: Օրինակ, կարդալու հասանելիություն տալը /home/ գրացուցակի բոլոր ֆայլերին և թղթապանակներին, որոնք սկսվում են «test»-ով, կարող է իրականացվել այս հրամանի միջոցով.

node --experimental-permission --allow-fs-read=/home/test* index.js

Երբ թույլտվության մոդելը միացված է, մշակողները կարող են օգտագործել գործընթացի օբյեկտի նոր թույլտվության հատկությունը՝ ստուգելու, թե արդյոք որոշակի թույլտվություն տրվել է գործարկման ժամանակ: Օրինակ:

process.permission.has('fs.write'); // true 
process.permission.has('fs.write', '/home/nodejs/protected-folder'); // true

Կարևոր է նշել, որ թույլտվության մոդելը դեռ փորձնական է, և դրա իրականացումը կարող է փոխվել Node.js-ի հետագա թողարկումներում: Այնուամենայնիվ, դրա ներդրումը նշանակում է քայլ առաջ՝ ծրագրավորողներին իրենց հավելվածների նկատմամբ ավելի մեծ վերահսկողություն և անվտանգություն ապահովելու հարցում: Ուսումնասիրելով և օգտագործելով Թույլտվության մոդելը՝ մշակողները կարող են ավելի լավ պաշտպանել իրենց հավելվածները հնարավոր սպառնալիքներից և ապահովել իրենց տվյալների ամբողջականությունը:

Քննադատները կասեն, որ «հեյ, Դենոն այդքան երկար ուներ»: Նրանք ճիշտ կլինեն, և իրականում Deno-ն ստեղծվել է Node-ի հիմնական թերությունները լուծելու համար, և անվտանգությունը դրանցից մեկն էր: Եկեք նայենք դրան Node-ի կողմից: Նրանք այնքան շատ ծրագրավորողներ ունեն, որոնք հենվում են իրենց վրա, և այնքան մեծ բիզնեսներ, որոնք իրենց հարթակում աշխատում են կարևոր կոդ, որ նրանք ստիպված են եղել այդքան ժամանակ տրամադրել՝ համոզվելու համար, որ ամեն ինչ պատրաստ է թողարկման համար, և նույնիսկ այսքան ժամանակ անց այն թողարկվում է որպես փորձարարական հատկանիշ՝ վստահ լինելու համար, որ նրանք դա ճիշտ կհասկանան:

Մեկ գործարկվող հավելվածներ (SEA)

Single Executable Apps (SEA) Node.js-ի փորձարարական հատկանիշ է, որի նպատակն է պարզեցնել հավելվածների տեղակայումն ու բաշխումը` բոլոր անհրաժեշտ ֆայլերը և ռեսուրսները միավորելով մեկ գործարկվող երկուականի մեջ: Այս մոտեցումն առաջարկում է մի քանի առավելություններ, ներառյալ տեղադրման հեշտությունը, կախվածության նվազեցված կառավարումը և տարբեր հարթակներում բարելավված շարժունակությունը:

Node.js 20-ում SEA-ի կառուցման գործընթացը կատարելագործվել է՝ պահանջելով Node.js-ի կողմից պատրաստված բլբի ներարկում JSON կոնֆիգուրից՝ չմշակված JavaScript ֆայլը ուղղակիորեն ներարկելու փոխարեն: Այս փոփոխությունը հնարավորություն է ընձեռում ՌԲԳ-ում բազմաթիվ համակցված ռեսուրսներ ներդնելու, մշակողների համար օգտագործման նոր դեպքեր բացելու և հավելվածների ավելի ճկուն փաթեթավորման հնարավորությունը:

Node.js 20-ում SEA ստեղծելու համար մշակողները նախ պետք է ստեղծեն JSON կազմաձևման ֆայլ, որը նշում է հավելվածի հիմնական մուտքի կետը, ինչպես նաև ստեղծվող բլբի ելքային ֆայլը: Օրինակ:

{ "main": "hello.js", "output": "sea-prep.blob" }

Հաջորդը, մշակողները կարող են օգտագործել Node.js-ի հետ — Experimental-sea-config դրոշը՝ JSON կոնֆիգուրացիայի հիման վրա բլբը ստեղծելու համար.

$ node --experimental-sea-config sea-config.json

Այս հրամանը կստեղծի blob ֆայլ (այս օրինակում sea-prep.blob), որը պարունակում է բոլոր անհրաժեշտ ռեսուրսները հավելվածի համար: Ստեղծված բշտիկը կարող է այնուհետև ներարկվել երկուականի մեջ, որի արդյունքում ստացվում է մեկ գործարկվող հավելված:

Կառուցելով ինքնուրույն հավելվածներ՝ մշակողները այժմ կարող են գործարկել այն հավելվածները, որոնք ստեղծվել են համակարգերի վրա, որտեղ Node.js-ը տեղադրված չէ: Սա կարող է հանգեցնել ավելի արդյունավետ և պարզեցված հավելվածների, որոնք ավելի հեշտ են տեղակայվում, կառավարվում և բաշխվում:

Այնուամենայնիվ, կարևոր է հիշել, որ SEA հատկանիշը դեռ փորձնական է և կարող է հետագա փոփոխություններ կրել Node.js-ի հետագա թողարկումներում: Մշակողները, ովքեր հետաքրքրված են SEA-ների գործածմամբ, պետք է տեղեկացված մնան թարմացումների և բարելավումների մասին՝ համոզվելու համար, որ նրանք օգտագործում են ամենաարդյունավետ և անվտանգ մեթոդներն իրենց հայտերի համար:

Կարևոր է, որ SEA-ները կարող են չաշխատել Alpine Linux-ում: Եթե ​​ցանկանում եք օգտագործել ձեր պարունակվող հավելվածը Docker կոնտեյներով, գուցե ավելի լավ է օգտագործել Debian Bullseye-ի կամ Debian Buster-ի վրա հիմնված կոնտեյներներ:

Կայուն թեստային վազորդ

Node.js 20-ի կայուն փորձնական վազորդը հսկայական բարելավում է ծրագրավորողների համար, քանի որ այն ապահովում է ամուր շրջանակ՝ իրենց հավելվածներում թեստերի հեղինակման, կազմակերպման և գործարկման համար: Node.js-ն ապահովում է հուսալի և արդյունավետ փորձարկման ենթակառուցվածք, որը մշակողները կարող են վստահորեն ինտեգրել իրենց նախագծերին՝ test_runner մոդուլը հայտարարելով որպես կայուն:

Ստորև բերված են կայուն փորձնական վազորդի հիմնական բաղադրիչները.

1. Բացատրեք, այն/փորձարկում և կեռիկներ. այս շինարարական տարրերն օգնում են թեստային ֆայլերի կառուցվածքին և թեստային դեպքերի կազմակերպմանը պարզ և տրամաբանական ձևով: «Նկարագրել» գործառույթը խմբավորում է նմանատիպ թեստեր, մինչդեռ «այն» կամ «թեստ» գործառույթները սահմանում են առանձին թեստի դեպքեր: Կեռիկներ, ինչպիսիք են «նախքան», «հետո», «յուրաքանչյուր մեկից առաջ» և «յուրաքանչյուրից հետո», կարող են օգտագործվել ցանկացած ռեսուրս ստեղծելու կամ մաքրելու համար, որոնք պահանջվում են թեստեր կատարելուց առաջ կամ հետո:

2. Ծաղրում. ծաղրելու հնարավորությունները տրամադրվում են թեստավարի կողմից՝ թույլ տալով ծրագրավորողներին թեստավորման ընթացքում փոխարինել իրենց հավելվածի կտորները ծաղրող առարկաներով: Հուսալի թեստի արդյունքներ ապահովելու համար այս ֆունկցիոնալությունը հատկապես օգտակար է որոշ բաղադրիչներ մեկուսացնելու, արտաքին կախվածությունները նմանակելու և ֆունկցիաների կամ մոդուլների վարքագիծը մանիպուլացնելու համար:

3. Դիտման ռեժիմ. Երբ սկզբնաղբյուրում փոփոխություններ են հայտնաբերվում, փորձարկողն անմիջապես կրկնում է թեստերը: Այս հատկությունը թույլ է տալիս ծրագրավորողներին արագ արձագանք ստանալ իրենց փոփոխությունների վերաբերյալ և նպաստում է արագ և արդյունավետ զարգացման աշխատանքային հոսքին:

4. Զուգահեռ կատարում. հանգույց — թեստային դրոշը ծրագրավորողներին հնարավորություն է տալիս միաժամանակ մի քանի թեստային ֆայլեր գործարկել՝ զգալիորեն նվազեցնելով նախագծի ներսում բոլոր թեստերը գործարկելու համար անհրաժեշտ ժամանակը: Այս հնարավորությունը շատ օգտակար է մեծ թվով փորձարկման դեպքերով մեծ ծրագրերի համար:

Թեև Node.js 20-ում կայուն թեստային գործարկիչը լավ շրջանակ է ապահովում հավելվածների փորձարկման համար, մոդուլի մյուս բաղադրիչները, ինչպիսիք են թղթակիցները և ծածկագրի ծածկույթը, դեռ կայուն չեն: Մշակողները պետք է ակնկալեն այս գործառույթների հետագա բարելավումներ և կատարելագործումներ Node.js-ի ապագա թողարկումներում, քանի որ փորձնական վազորդը զարգանում է:

Մշակողները կարող են ապահովել իրենց հավելվածների հուսալիությունն ու որակը՝ ներառելով կայուն թեստային վազողին իրենց զարգացման գործընթացում: Այս ամբողջական թեստավորման շրջանակը պարզեցնում է թեստերի ստեղծման, կազմակերպման և գործարկման գործընթացը՝ թույլ տալով ծրագրավորողներին կենտրոնանալ բարձրորակ, վրիպազերծ ապրանքներ արտադրելու վրա:

Այլ ուշագրավ փոփոխություններ Node.js 20-ում

Պատվերով ESM բեռնիչ Կեռիկներ

Հատուկ ES մոդուլի կյանքի ցիկլի կեռիկներ, որոնք մատակարարվում են բեռնիչների միջոցով ( — experimental-loader=./foo.mjs), այժմ աշխատում են հատուկ շղթայում: Այս մեկուսացումը երաշխավորում է, որ բեռնիչների և հավելվածի կոդի միջև խաչաձեւ աղտոտում չկա: Բացի այդ, import.meta.resolve()-ը թարմացվել է՝ համաժամանակյա վերադառնալու համար՝ համապատասխանեցնելով դիտարկիչի վարքագծին: Այս փոփոխությունները ճանապարհ են հարթում ESM բեռնիչները որպես կայուն նշելու համար, քանի որ համայնքի կողմից հաղորդված էական սխալների բացակայությունը:

V8 11.3 Շարժիչ

JS runtime-ի նոր թողարկումն ունի V8 JavaScript շարժիչի ավելի նոր տարբերակ (տարբերակ 11.3), որը ներառված է Chromium 113-ում: Այս թարմացումը բարելավում է կատարողականությունը և ավելացնում է նոր լեզվական առանձնահատկություններ, ինչպիսիք են String.prototype.isWellFormed և toWellFormed, պատճենելու մեթոդներ Array և TypedArray, չափափոխվող ArrayBuffer և աճող SharedArrayBuffer, RegExp v դրոշ՝ սահմանված նշումով + տողի հատկություններով և WebAssembly Tail Call:

Կատարման բարելավումներ

Node.js 20-ը ցույց է տալիս կատարողականի նորացված շեշտադրումը նախորդ հիմնական թողարկումից հետո: Զգալի բարելավումներ են կատարվել գործարկման ժամանակի հիմնական բաղադրիչներում, ինչպիսիք են URL, fetch() և EventTarget: EventTarget-ի սկզբնավորման արժեքը կիսով չափ կրճատվել է, ինչի արդյունքում ավելի արագ մուտք է գործում այն ​​օգտագործող բոլոր ենթահամակարգերը: V8 Fast API մեթոդները նույնպես օգտագործվել են API-ներում կատարողականությունը բարձրացնելու համար, ինչպիսիք են URL.canParse()-ը և ժամանակաչափերը:

Web Crypto API

Node.js-ն ընդլայնել է Web Crypto API ֆունկցիաների փաստարկները՝ JavaScript այլ միջավայրերի հետ ավելի լավ փոխգործունակության համար: Պարամետրերն այժմ պարտադրված և վավերացված են՝ ըստ իրենց WebIDL սահմանումների: Այս տարբերակը բարելավում է համատեղելիությունը տարբեր Web Crypto API-ի ներդրման հետ:

Պաշտոնական աջակցություն ARM64 Windows-ի համար

Node.js-ն այժմ պաշտոնապես աջակցում է ARM64 Windows-ին, որը թույլ է տալիս պլատֆորմի վրա տեղական կատարումը: Node.js-ի ներբեռնման կայքը այժմ ներառում է MSI, zip/7z փաթեթներ և գործարկվողներ ARM64 Windows-ի համար՝ ի լրումն բոլոր այլ հարթակների: Աջակցության ներկայիս մակարդակը 2-րդ մակարդակն է, որն ավելի բարձր է, քան փորձնականը, բայց ավելի ցածր է, քան 1-ին մակարդակը:

ARM64 ճարտարապետությունը գնալով ավելի է ընդունվում տարբեր սարքերում, ներառյալ նոութբուքերը, պլանշետները և IoT սարքերը: Windows ARM64-ի պաշտոնական աջակցությունը Node.js-ում թույլ է տալիս ծրագրավորողներին ստեղծել և տեղակայել հավելվածներ սարքավորումների ավելի լայն շրջանակի վրա՝ ապահովելով համատեղելիություն և օպտիմալ կատարում տարբեր հարթակներում:

Առաջընթաց վեբ հավաքման համակարգի միջերեսում (WASI)

Node.js-ի WASI-ի ներդրումը զարգանում է, և Node.js 20-ում WASI-ն ակտիվացնելու համար այլևս չի պահանջվում հրամանի տող տարբերակ: Այս թարմացումը հեշտացնում է ծրագրավորողների օգտագործումը և հեշտացնում է ինտեգրումը հավելվածներին: Քանի որ WASI թիմը պատրաստվում է նախադիտմանը2, ավելի շատ փոփոխություններ են կատարվել ապագա թողարկումները պլանավորելու համար, ներառյալ նոր WASI(-ը) կանչելիս տարբերակի տարբերակի պահանջը:

Node.js 20 Ընդմիջվող փոփոխություններ

Եթե ​​դուք նախատեսում եք արդիականացնել Node 20-ը ձեր Node 18-ից կամ Node 16-ից, դուք պետք է տեղյակ լինեք որևէ բեկումնային փոփոխության մասին: Այս անգամ JavaScript-ի գործարկման ժամանակի ետևում գտնվող թիմը թվարկեց միայն մեկ փոփոխություն, որը կարող էր խնդիրներ առաջացնել: Դա url.parse()-ի անվավեր պորտերով հնացումն է: Այս անգամ դուք «միայն նախազգուշացում կստանաք, բայց դա պետք է հիշել:

Եզրակացություն

Վերջապես, Node.js 20-ի թողարկումն առաջարկում է մի շարք նոր հնարավորություններ, արդիականացումներ և բարելավումներ, որոնք կարող են զգալիորեն ազդել արդյունաբերության լայն շրջանակի հավելվածների վրա: lisՈրպես աութսորսինգ ընկերություն, որը պարտավորվում է արդի մնալ տեխնոլոգիական բարելավումներին, շատ կարևոր է մշակողների և կազմակերպությունների համար ուսումնասիրել այս փոփոխությունները և որոշել դրանց հնարավոր օգուտները: Քանի որ Node.js 20-ը հոկտեմբերին մուտք է գործում երկարաժամկետ աջակցության (LTS) և ծառայում է որպես «Ընթացիկ» թողարկում հաջորդ վեց ամիսների համար, այժմ հիանալի հնարավորություն է ծանոթանալու դրա տրամադրած բարելավումներին և ուսումնասիրելու դրանց հետևանքները ապագա նախագծերի համար:

Ինչպե՞ս թարմացնել Node.js-ը:

Ինչպե՞ս թարմացնել Node.js-ը պաշտոնական եղանակով:

LTS-ը և ընթացիկ թողարկումները ներբեռնելու հղումները կարող եք գտնել https://nodejs.org/en/download կայքում: Դուք կկարողանաք գտնել Node թողարկում macOS-ի, Windows-ի, Linux-ի տարբեր բաշխումների կամ նույնիսկ AIX-ի համար PowerSystems-ում:

Սովորաբար խորհուրդ ենք տալիս տեղադրել LTS տարբերակը: Այս անգամ ուղղակիորեն անցեք 20 տարբերակին, քանի որ այն կպահպանվի մինչև… 2026 թվականի սկիզբը:

Ինչպե՞ս թարմացնել Node.js-ը Choco-ի հետ:

Microsoft-ի ՕՀ-ի ավելի փորձառու օգտվողները կցանկանան տեղադրել նոր թողարկումը Choco-ի միջոցով: Choco-ն Windows-ի փաթեթների կառավարիչ է:

Եթե ​​դեռ չեք կատարել, կարող եք տեղադրել Choco-ն՝ հետևելով այս քայլերին:

Դուք կարող եք գտնել փաթեթը նորագույն այստեղ:

Տեղադրելու համար պարզապես գործարկեք՝

choco install nodejs

Ինչպե՞ս թարմացնել Node.js-ը NVM-ով:

Ինչպես NVM-ի GitHub ռեպո գործիքի համար, nvm-ն թույլ է տալիս արագորեն տեղադրել և օգտագործել հանգույցի տարբեր տարբերակներ հրամանի տողի միջոցով:

Եթե ​​դուք չեք տեղադրել NVM ձեր macOS կամ Linux բաշխման վրա, կարող եք դա անել՝ հետևելով այս քայլերին:

Node.js 20-ը NVM-ով տեղադրելու համար պարզապես գործարկեք՝

nvm install 20

Ինչպե՞ս թարմացնել Node.js-ը Volta-ով:

Volta-ն ամենանոր գործիքն է վերը թվարկված երեքներից: Սա նաև միակ միջպլատֆորմային գործիքն է երեքի մեջ, որը հսկայական պրոֆեսիոնալ է:

Եթե դուք չեք տեղադրել Volta-ն, կարող եք դա անել՝ հետևելով պաշտոնական էջում նշված քայլերին:

Node 20.js-ը Volta-ով տեղադրելու համար գործարկեք՝

volta install node@20

Node.js 20-ը ձեր նախագծերում ամրացնելու, գործարկման ժամանակի տարբերակը տարբեր մեքենաներով համաժամացնելու համար գործարկեք՝

volta pin node@20

Սկզբնապես հրապարակվել է https://www.itmagination.com-ում: