programmatūra · 5 min · 19.07.2026

Node.js 26.5.0 ļauj importēt teksta failu kā moduli — un pievieno Blob straumēšanu

Node.js 26.5.0 ļauj ievilkt teksta failu tieši kā moduli. Ar karodziņu --experimental-import-text rindiņa import sablons from './veidne.txt' with { type: 'text' } atgriež faila saturu kā parastu virkni. Laidiens iznāca 8. jūlijā, un līdzās teksta importam tas pievieno arī Blob.prototype.textStream() straumēšanai un padara ReadableStreamTee() par publisku funkciju.

Līdz šim, lai kodā ievilktu SQL vaicājumu, HTML veidni vai licences tekstu, izstrādātājam nācās izsaukt fs.readFileSync() vai turēt to būvēšanas soli, kas failu iepako JavaScript virknē. Teksta imports šo soli izņem: fails kļūst par ES moduli ar vienu noklusējuma eksportu, kas ir tā saturs UTF-8 kodējumā.

Kā strādā teksta imports

Sintakse balstās uz import atribūtiem — to pašu mehānismu, ar ko jau importē JSON. Atribūts with { type: 'text' } ir obligāts; bez tā Node.js mēģinās failu parsēt kā kodu un izmetīs kļūdu. Fails tiek nolasīts kā UTF-8, un tā vērtība pieejama caur noklusējuma eksportu:

node –experimental-import-text app.js

Praksē tas izskatās šādi. Fails query.sql satur SQL vaicājumu, un kods to ievelk tieši:

import query from './query.sql' with { type: 'text' };
const rows = await db.all(query);

Mainīgais query ir virkne ar faila saturu. Tipu pārbaudītājs to redz kā virkni, un redaktors seko importam līdz pašam failam. Salīdzinājumam — ar fs.readFileSync('./query.sql', 'utf-8') ceļš ir teksta virkne, ko neviens rīks nepārbauda, un kļūdains ceļš atklājas tikai izpildlaikā.

Bez karodziņa funkcija nedarbojas. Pievienošanas pieprasījumā Node.js komanda skaidro, ka to tur eksperimentālu tāpēc, ka atbilstošais TC39 priekšlikums vēl ir 3. posmā un pārlūku puse nav stabilizējusies. Priekšlikums nosaka, ka teksta modulis atklāj tikai noklusējuma eksportu — virkni — un neko citu. Nosauktus eksportus tas neatļauj, tāpēc import { x } from './fails.txt' šeit nestrādās.

Konkurenti šeit ir priekšā. Bun teksta importu bez karodziņa atbalsta kopš 2024. gada aprīļa, bet Deno to piedāvā zem --unstable-raw-imports. Node.js pieturas pie piesardzīgākas taktikas: eksperimentāls karodziņš tagad, noklusējums vēlāk, kad specifikācija būs nostabilizējusies.

Blob straumēšana ar vienu izsaukumu

Otrs jaunums ir Blob.prototype.textStream(). Metode atgriež ReadableStream, kas Blob saturu atkodē kā UTF-8 virknes gabalus. Iekšēji tā dara to pašu, ko blob.stream() caurvadīšana pa TextDecoderStream, tikai vienā izsaukumā.

Ieguvums ir atmiņā. Ja Blob ir liels — augšupielādēts fails vai lejupielādes ķermenis —, tā satura ievilkšana ar blob.text() ielādē visu virkni atmiņā uzreiz. textStream() ļauj to apstrādāt pa gabaliem. Metode seko W3C FileAPI specifikācijai, kas apraksta Blob satura lasīšanu kā virkņu straumi.

Kopā ar to laidiens padara ReadableStreamTee() par augstākā līmeņa funkciju. Tā sadala vienu straumi divās, kas lasa to pašu datu plūsmu neatkarīgi — noderīgi, ja vienu un to pašu ķermeni vajag gan nolasīt, gan iebāzt kešatmiņā. Agrāk to nācās risināt ar rokas rakstītu apeju. Funkcija atbilst WHATWG straumju standartam, tāpēc kods, kas jau strādā pārlūkā, tagad iet arī uz Node.js pusi.

Kas vēl ir 26.5.0

Perf_hooks modulis tagad mēra aizkavi katrā notikumu cikla iterācijā atsevišķi, nevis vidēji. Tas dod smalkāku ainu par to, kur notikumu cikls iestrēgst. TLS pusē Node.js sāk ziņot par sarunātajām TLS grupām — informāciju, kas agrāk nebija pieejama no lietojumprogrammas.

Atjaunināti arī iekšējie atkarību komponenti: HTTP klients undici, HTTP/3 bibliotēka nghttp3 un iebūvētais SQLite. Laidienam pievienojies jauns izlaidējs Stjuarts Adisons, kura GPG atslēga ierakstīta oficiālajā izlaidēju sarakstā.

Node.js 26 ir pašreizējais (Current) zars. Tas iznāca maijā ar pēc noklusējuma ieslēgtu Temporal datu un laika API un V8 dzinēju 14.6. Zara atbalsts beigsies aptuveni 2027. gada janvārī, kad to nomainīs nākamā versija. Node.js pēc 26. laidiena pāriet uz gada izlaides ritmu, tā ka nepāra un pāra numuru sistēma paliek pagātnē.

Ko ar to darīt praksē

Teksta imports visvairāk noderēs tur, kur kodā jāievelk garš teksts: SQL migrācijas, GraphQL shēmas, e-pasta veidnes, licences. Līdz šim katrs no šiem gadījumiem prasīja vai nu izpildlaika failu lasīšanu, vai būvēšanas soli. Ar karodziņu tie kļūst par vienu importa rindiņu, ko redaktors saprot un ko var pārbaudīt tipu pārbaudītājs.

Ir arī robeža. Teksta imports lasa failu būvēšanas laikā fiksētā ceļā, tāpēc dinamiskam saturam, kas mainās izpildlaikā, tas neder — tur joprojām vajag fs. Un tā kā fails kļūst par moduli, tā saturs iesalst atmiņā uz visu procesa dzīves laiku, gluži kā jebkurš cits imports.

Blob straumēšana ir šaurāks, bet noderīgs papildinājums serverpusē, kur tiek apstrādātas lielas augšupielādes. Abas funkcijas ir pieejamas jau tagad — teksta imports zem karodziņa, textStream() bez tā. Ražošanā teksta importu vēl ir vērts turēt aiz karodziņa, jo API līdz stabilai versijai vēl var mainīties. Kas grib to izmēģināt, var lejupielādēt Node.js 26.5.0 no oficiālās vietnes un palaist skriptu ar attiecīgo karodziņu.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no programmatūrasaistītie