Ce face os (node:os)
Modulul node:os răspunde la întrebări despre calculatorul pe care rulează programul. os.platform() dă "linux", "darwin" (macOS) sau "win32" (Windows, inclusiv pe 64 de biți), iar os.arch() arhitectura ("x64", "arm64").
os.availableParallelism() spune câte operații pot rula în paralel (de obicei numărul de nuclee); îl folosești ca să alegi câte fire sau procese pornești. os.cpus() dă detalii pentru fiecare nucleu. os.totalmem() și os.freemem() întorc memoria în octeți.
Pentru căi portabile ai os.homedir() (directorul utilizatorului) și os.tmpdir() (directorul pentru fișiere temporare). os.EOL este sfârșitul de rând al sistemului: "\n" pe Linux și macOS, "\r\n" pe Windows.
Parametri
| Parametru | Descriere |
|---|---|
os.platform() / os.type() |
Numele platformei ("linux") / al sistemului ("Linux", "Darwin", "Windows_NT"). |
os.availableParallelism() |
Numărul de operații paralele recomandat. |
os.totalmem() / os.freemem() |
Memoria totală / liberă, în octeți. |
os.homedir() / os.tmpdir() |
Directorul utilizatorului / directorul temporar. |
os.EOL |
Sfârșitul de rând al sistemului. |
os.userInfo() |
Numele utilizatorului curent, directorul lui, shell-ul. |
Exemple
Exemplul 1: Un rezumat al sistemului
Valorile diferă de la un calculator la altul; acesta este rezultatul pe un laptop cu macOS.
import os from "node:os";
const gb = (octeti) => (octeti / 1024 ** 3).toFixed(1) + " GB";
console.log("Sistem:", os.type(), os.platform(), os.arch());
console.log("Nuclee:", os.availableParallelism());
console.log("Memorie:", gb(os.totalmem()), "total,", gb(os.freemem()), "liberă");
console.log("Utilizator:", os.userInfo().username, "în", os.homedir());
Rezultat posibil (diferă de la un calculator la altul)
Sistem: Darwin darwin arm64
Nuclee: 10
Memorie: 16.0 GB total, 5.3 GB liberă
Utilizator: ana în /Users/ana
Exemplul 2: Cod care merge pe orice sistem
Scriem un fișier CSV cu sfârșitul de rând al sistemului și alegem câte sarcini rulăm deodată.
import os from "node:os";
import path from "node:path";
import { writeFileSync, readFileSync } from "node:fs";
const randuri = ["nume,oras", "Ana,Iași", "Ion,Cluj"];
writeFileSync("elevi.csv", randuri.join(os.EOL));
console.log(readFileSync("elevi.csv", "utf8").split(os.EOL).length, "rânduri");
const paralel = Math.max(1, os.availableParallelism() - 1);
console.log("Sarcini în paralel cel puțin 1:", paralel >= 1);
console.log("Căi absolute:", path.isAbsolute(os.homedir()), path.isAbsolute(os.tmpdir()));
Rezultat
3 rânduri
Sarcini în paralel cel puțin 1: true
Căi absolute: true true
Greșeli frecvente
- Verifici
os.platform() === "win64": valoarea nu există. Windows este mereu"win32", indiferent de arhitectură. - Folosești
os.cpus().lengthca să alegi numărul de fire: în containere (Docker) poate fi mai mare decât ce are voie procesul.os.availableParallelism()ține cont de aceste limite. - Scrii căi spre directorul utilizatorului cu
~("~/date.txt"): Node.js nu înlocuiește tilda. Foloseștepath.join(os.homedir(), "date.txt").
Comenzi înrudite
process.env: Obiectul cu variabilele de mediu ale procesului: configurări ca PORT, NODE_ENV sau chei de API, mereu ca șiruri.path.join: Lipește mai multe bucăți într-o singură cale, cu separatorul corect pentru sistemul de operare, și curăță ./ și ../.worker_threads (Worker): Rulează cod JavaScript în fire de execuție separate, ca un calcul greu să nu blocheze restul programului.child_process.exec: Rulează o comandă în shell (ca în terminal) și primește la final tot textul afișat de ea.